最近在根据教程学习网络爬虫,如何从真实网页中获得信息,虽然之前也写过一些爬虫,但是始终没有经过科班培训,这次算是正式学习吧,同时记录一些心得体会
上图是一个简单的网页解析代码,同时可以作为学习beautifulsoup库的样本
soup.select方法:
1、使用的是CSS selector路径,不是xpath路径(可用于Scrapy)
2、例如titles中,如果想要依靠标签中有某个属性来实现筛选,则在CSS selector中修改为 标签[属性],例如:a[target="_blank"]
同样,对于imgs中,使用宽度=160这个属性,进行图片的筛选
3、在cates(类别信息)中,一个标题下有多个类别,则可以通过选择父节点(p13n_reasoning_v2)标签(位置信息)来获得所有信息
4、在复杂网页中,往往CCS Selector路径很长,其实并不必要,只要能找到唯一的标签来定位该元素即可,例如<a class = "time"> 这时搜索.time如果唯一,则可以使用soup.selcet('a.time')来获得内容
如果审查内容为< id = "content">后边有<span class = 'price'> 且搜索唯一,则可是用soup.select('#content span.price')
也就是说 # 代表 id . 代表 class
5、学到一种字典解析方式,后边加上一个if判断句
6、除了利用soup.select方法外,还可以利用soup.title.text方法,如果浏览网页的标题在浏览器的标签页上的话,这是最简单的实现方法
soup.find_all方法
图2 41行中,span为标签,c_25d是class,这样找到所有的这种样式的内容
soup解析内容时候
1、常用的是get_text()方法
2、获得连接信息,则利用get方法,参数为具体链接的标签,例如img.get('src')
3、对于多个信息,利用stripper_strings方法来得到
小技巧
1、学会好的展示方法,将数据整理为一个字典,利用zip函数
2、在爬取连续多个页面的网页时,可以“列表解析式”构造网址
例如:url = ['www.****{}.com'.format(str(i)) for i in range(1,100,3)]
3、使用headers={'User-Agent':' '
'Cookie':' '}来模拟人类登陆
4、为了反爬虫,可以爬取手机(移动端)页面