1.爬虫我现在常用的两种方法:
(1)手动定位所需数据的所在网址(request url),优点:直捣黄龙,一击致命。
对于静态网站:直接右键导出网页源代码,通过ctrl+F即可查询到网页中显示的所有数据。通过右键检查选择Network——All,然后查看Name中的文件对应的Preview,如果其中显示该网页中几乎所有内容(包括你所需要的数据),就查看Headers,一般请求方式(request method)为Get,所需的网址为Request URL。
具体步骤:((1))import requests ((2))headers = {......} (注意:一般直接写‘User-Agent’即可) ((3))response = requests.get('网址',headers = headers)
对于动态网站:一般是通过AJAX(编写js脚本)生成的,在网页源码中查不到网页中显示的数据,一般通过右键检查选择Network——All或者XHR、JS、Doc等,然后查看Name中的文件对应的Preview,如果其中显示该网页中你所需要的数据,就查看Headers,一般请求方式(request method)为Get或Post,所需的网址为Request URL。
注意:动态网站反爬机制有的很复杂,一般通过在headers中将所需内容填全,cookies也很重要,还有params等
然后爬取过程中若出现error,可通过try....except: pass 保存出错前的数据,但出错后的数据就爬不了了,根本上解决办法是:
设置IP代理池、cookies池等 (注:这部分之前自己尝试过,这两天也会再试一下,然后将心得写上,实在不好意思。。。)
(2)通过自动化模拟人登录网站,我选用selenium,
注:这个之前用过,好久没用了,这几天会用一下,然后将心得补上,实在不好意思。。。
2.对于文本内容通过response.text得到的一般分为两种格式:
(1)json格式:是一个字符串里面包含着字典,字典里又套着字典
例如:
(2)xml格式:是一个字符串里面包含着html的一些程序
例如:
3.解析(parse):
(1)对于json格式的文本,一般不太好爬,爬取的网页为动态网页,从中获取自己所需的数据就非常方便,只需找到数据的位置然后通过调用字典的key即可获取其value
具体步骤:1.import json 2.bs = json.load(response.text) 3.bs['key'] = value
(2)对于xml格式的文本,一般比较好爬,爬取的网页为静态网页,获取数据我一般通过xpath。具体步骤:1.from lxml import etree 2.bs = etree.HTML(response.text) 3.bs.xpath('//...... ') .text 。
注意:通过xpath获取的为该元素的地址,是列表形式,须通过列表索引获取该地址,如下图所示: