Xpath
xpath如何取包含多个class属性
但是如果html是
1 | div class="test demo"></div><div class="demo test"></div><div class="test demo2"></div> |
如果目标 class 不一定是第一个,那么:
//div[contains(concat(‘ ‘, @class, ‘ ‘), ‘demo’)] ##只想选出有demo这个class的对象
取多个class属性值的元素
1 | <div class='a b'>test</div> |
可以用如下的表达式:
xpath(‘//div[contains(@class,”a”)]’) #它会取得所有class为a的元素
xpath(‘//div[contains(@class,”a”) and contains(@class,”b”)]’) #它会取class同时有a和b的元素
##应对反爬虫措施解决方案
user_agent 伪装和轮换
不同浏览器的不同版本都有不同的user_agent,是浏览器类型的详细信息,也是浏览器提交Http请求的重要头部信息。我们可以在每次请求的时候提供不同的user_agent,绕过网站检测客户端的反爬虫机制。比如说,可以把很多的user_agent放在一个列表中,每次随机选一个用于提交访问请求。有一个提供各种user_agent的网站:
http://www.useragentstring.com/
最近又看到一个专门提供伪装浏览器身份的开源库,名字取得很直白:
使用代理IP和轮换
检查ip的访问情况是网站的反爬机制最喜欢也最喜欢用的方式。这种时候就可以更换不同的ip地址来爬取内容。当然,你有很多有公网ip地址的主机或者vps是更好的选择,如果没有的话就可以考虑使用代理,让代理服务器去帮你获得网页内容,然后再转发回你的电脑。代理按透明度可以分为透明代理、匿名代理和高度匿名代理:
- 透明代理:目标网站知道你使用了代理并且知道你的源IP地址,这种代理显然不符合我们这里使用代理的初衷
- 匿名代理:匿名程度比较低,也就是网站知道你使用了代理,但是并不知道你的源IP地址
- 高匿代理:这是最保险的方式,目标网站既不知道你使用的代理更不知道你的源IP
代理的获取方式可以去购买,当然也可以去自己爬取免费的,这里有一个提供免费代理的网站,可以爬下来使用,但是免费的代理通常不够稳定。
设置访问时间间隔
很多网站的反爬虫机制都设置了访问间隔时间,一个IP如果短时间内超过了指定的次数就会进入“冷却CD”,所以除了轮换IP和user_agent
可以设置访问的时间间间隔长一点,比如没抓取一个页面休眠一个随机时间:
1 | import time,random |

