上次在最后留了爬取豆瓣排名前25的爬取代码,本次就代码一步步分析,用你能听懂的话来带你认识简单易懂的爬虫,请多多支持,爱你们,有问题在评论区留下你的疑问!
1.BeautifulSoup是什么?
灵活又方便的网页解析库,处理高效,支持多种解析器。
利用它不用编写正则表达式即可方便地实现网页信息的提取。
安装:pip3 install BeautifulSoup4
解析器 | 使用方法 | 优势 | 劣势 |
---|---|---|---|
Python标准库 | BeautifulSoup(markup, “html.parser”) | Python的内置标准库、执行速度适中 、文档容错能力强 | Python 2.7.3 or 3.2.2)前的版本中文容错能力差 |
lxml HTML 解析器 | BeautifulSoup(markup, “lxml”) | 速度快、文档容错能力强 | 需要安装C语言库 |
lxml XML 解析器 | BeautifulSoup(markup, “xml”) | 速度快、唯一支持XML的解析器 | 需要安装C语言库 |
html5lib | BeautifulSoup(markup, “html5lib”) | 最好的容错性、以浏览器的方式解析文档、生成HTML5格式的文档 | 速度慢、不依赖外部扩展 |
2.爬取前准备工作
本次实例:爬取豆瓣电影top250前25名
本次爬取网址:“https://movie.douban.com/top250?start=0”
本次所用库:
- requests库
- BeautifulSoup解析库
-
3.爬取全程分析
3.1 爬取代码
import requests #导去requests库 from bs4 import BeautifulSoup url="https://movie.douban.com/top250?start=0" #豆瓣top250网址 headers={ "user-agent":"chrom/10" } r=requests.get(url=url,headers=headers) #获取响应对象 demo=r.text List=[] t=BeautifulSoup(demo,"html.parser") for i in range(0,25): item=t.find_all("div","item")[i] data=[] data.append(item.find_all("span","title")[0].text) List.append(data) print(List)
3.2代码分析
url=“https://movie.douban.com/top250?start=0”
注意"top250?start=0"
这里就是https://blog.csdn.net/qqshenbaobao/article/details/117437018?spm=1001.2014.3001.5501.这篇博客里所说的请求参数,通过get方法或者post请求方法可以传入参数;
这里的top250参数就是电影排名前250的主网页,如下:
这里我试了很多遍filter的参数传入,输入很多发现对界面没有影响,如果小可爱们知道这个是干嘛的可以在评论区给出,博主知识尚有不足,请海涵。
确实,通过多次尝试,这里的start参数指的是界面第一个电影排名信息!!!
由此可见,我们可以通过传入参数不同来获取我们想要的排名域,从而定向爬取我们想要的信息,怎么做呢?你需要尝试多多使用开发者工具,也就是F12键,这是程序员不错的开发工具,能帮你做很多事情,来吧,一起分析下去
单个li:
通过审查元素,可以看出每个电影信息都藏在li标签中,因此可以通过BeautifulSoup的解析来提取我们想要的信息
t=BeautifulSoup(demo,“html.parser”)
这里的demo即网页内容,你大可以通过requests库来获得网页内容,你可以在博主前面的博客中复习下相关知识
这行代码是固定的BeautifulSoup解析网页内容的套路模板,当然你可以用别的解析,但是前提是满足所需条件
for i in range(0,25):为啥用循环?为啥是25次循环?
25个li,一页25个电影信息,学会f12开发者工具你就会非常清晰的明白。item=t.find_all(“div”,“item”)[i]
这里用的是BeautifulSoup里的查找元素的方法,返回的是列表"div"指的是标签名,"item"指的是标签元素对应的class即类名,通过标签名和类名定位每一个电影所在位置,再爬取信息,一步步来!关于BeautifulSoup解析库相关获取元素的各种属性的方法将在下期博客,请继续关注!
下面获取电影名也是同样的道理,本博客旨在引导大家理解思想,相关细节可能会照顾不到,有问题的可以在评论区提出,我会一一解答!
好了,就到这里了,我们下期再见!!!