昨天学了了如何用selenium的webdriver获取比较简单的网页的html。
今天学习如何从html中获取我们想要的信息,以一个真正意义上的爬虫小项目为例。
比如爬取python百度贴吧
找到每一篇帖子的标题、发帖人、日期、楼层以及跳转链接
python贴吧首页的URL是
http://tieba.baidu.com/f?kw=生活大爆炸&ie=utf-8&pn=0
向后翻一页,我们发现URL变成了
http://tieba.baidu.com/f?kw=python&ie=utf-8&pn=50
可以发现,&pn后的数字控制着页码数
然后用chrome查看网页的源代码
每一篇帖子的标题,作者,发帖日期的内容都在<li class = 'j_thread_list clearfix'>标签下,因此可以用bs4来筛选,也可以用webdriver来筛选,我们这里先用bs4来筛选。
首先get网页的html源代码
其次进行筛选
我们先理一下<li>标签下的结构:<li>标签下有很多<div>标签,我们需要的信息就在其中
应用BeautifulSoup.find()的方法
这里先用soup.find()的方法找到各种li标签,然后具体分析所需要的内容在li标签的哪个子标签中。
我们发现,前三个置顶帖子的li标签的class属性与之后的帖子class属性有所差异,需单独处理。
简单介绍下soup.find()的方法:这里只用到了两个参数,即哪个标签,标签下的class属性是什么(帖子的class属性
是有规律可循的)因此可以定位所有帖子的标签。
更详细的教程可以参见文档:
https://www.crummy.com/software/BeautifulSoup/bs4/doc.zh/#find-all
最后我们得到如下结果:
当然这只是爬取了第一页的内容,更具体的见下一节blog