爬虫、反爬虫、反反爬虫就像是一条麻花绳,它们之间的关系错综复杂,互为衍生。爬虫工程师与网站就像是在斗智斗勇,一方设置门槛,一方来攻破。代理IP之前简单介绍过几款反爬虫策略,但是也只是局限在理论上,今天带来案例来跟大家进行分享。
随机化网页源码
用display:none来随机化网页源码,有网站还会随机类和id的名字,然后再加点随机的tr和td,这样的话就增大了我们解析的难度。
解决办法:
可以看到每个IP都是包含在一个class为“ip”的td里的,所以我们可以先定位到这个td,然后进行下一步解析。虽然这个td里面包含了很多的span标签和p标签,而且也每个标签的位置也没有什么规律,不过还是有办法解析的。方法就是把这个td里的所有文字提取出来,然后把那些前后重复的部分去除掉,最后拼接到一起就可以了,代码如下:
1 et = etree.HTML(html) # html:网页源码
2 for n in range(1, 21):
3 lst = et.xpath('//table/tbody/tr[{}]/td[1]//text()'.format(n))
4 proxy = ""
5 for i in range(len(lst) - 1):
6 if lst[i] != lst[i + 1]:
7 proxy += lst[i]
8 proxy += lst[-1]
9 print(proxy)
最后就能得到我们想要的数据了。
最好的学习方法就是实践,这是再多的理论知识都比不过的。大家不妨在遇到反爬虫的时候可以进行操作。
19
2019-11
17
2019-07
02
2020-01
21
2019-05
22
2019-11
23
2019-05