前言
实战(一)之使用自带urllib和re正则表达式获取电影详情页链接
其实大多情况下,python自带的urllib和re正则表达式已经可以满足我们的日常需求了,但是,聪明的世人怎么会满足于此呢,只有更好就没有最好。所以,就诞生了requests和beautifulsoup这两个作为爬虫的黄金组合。而python的魅力就在于此,你可以找到很多好用易上手到让你心头一颤的第三方库。
一、安装&简单使用入门。
1、安装
使用Pip可以很方便的安装:
pip install requests
pip install beautifulsoup4
2、requests 入门。
1 | 复制代码 import requests |
更多详细的请查看官方的中文文档,详细易懂权威。
http://docs.python-requests.org/zh\_CN/latest/user/quickstart.html
3、beautifulsoup入门。
beautifulsoup可以快速的去定位HTML文档,HTML是用来描述网页的一种超文本标记语言,不是一种编程语言。
如果你没有HTML基础,可以去花一天的时间了解下。
菜鸟教程–HTML
注意的点
- 现在假设知道了HTML是个什么东西,你会发现HTML就是由一层又一层的tag组成,每个tag节点有自己的class属性或者其他属性、自己的父tag、子tag以及兄弟tag,而beautifulsoup的作用就是通过这种蛛丝马迹,轻易的把你要的凶手。。哦不目标节点揪出来,免去了写正则表达式的繁琐噩梦。
- beautifulsoup对HTML的解释是依赖第三方解释库的,常用的有html.parser、lxml、支持xml解释的lxml-xml、html5Lib,各有优缺点,根据我的经验,有时候使用beautifulsoup返回的待处理文本,会缺少一些tag节点,但是你又确定这不是动态加载的话,其实这是因为解释器无法解释,直接跳过导致的,这时候,可以更换解释器尝试一下。
常用的方法
我这里只用下find和find_all作为实例,详细的用法请去权威易懂的官方文档。 毕竟做搬运工是件很累且无意义的事情。
1 | 复制代码from bs4 import BeautifulSoup |
我们会得到如下的soup体,然后定位到红色框的a块。
通过属性定位查找该节点 (find)
1 | 复制代码 a = soup.find('a',attrs={'class':'lnk-book'}) |
返回包含所有该节点的列表(find_all)
1 | 复制代码a_s = soup.find_all('a') |
提示:有时候需要先将目标范围逐层缩小,这样容易获取目标节点。
二、爬取豆瓣图书top250
分析页面。
1、 我们点击底部的页码,会发现页数是25的倍数,从0开始,这样我们就可以构造对应页的url了。
2、我们定位到每页,查找书本的信息,获取对应的url,下图为每页爬取到的书本详情页url。
3、在图书的详情页,我们定位到如下元素。获取该书的书名,评分和评分人数。
代码编写
1 | 复制代码# -*- coding:utf-8 -*- |
总结
分析页面,找到目标元素所在的tag节点,记录其属性,通过beautifulsoup的find和find_all找到该区域,然后进行相应的提取。这个过程中,要说明一下,使用单线程阻塞爬取250本书的信息,比较耗时,计划后面将会使用多线程进行改进,敬请期待哟。
本文转载自: 掘金