Python培训
400-996-5531
在爬取网站的过程中,很多网站都有反爬机制,它可能会限制每个Ip的访问速度或访问次数。如果限制访问的速度,则可以通过time.sleep进行短暂休眠后再次爬取。但是对于限制Ip访问次数的时候,则必须通过代理Ip轮换去访问目标网址。所以需要构建子的IP池。关于怎么建,看这篇文章就够了。
第一步:找到一些IP代理的网站,如快代理:
通过一般的爬虫思路将IP爬取下来,将爬下来的IP放在列表中存起来,要注意的是IP的格式一般为字典{HTTP:Ip:端口}。代码如下:
import requests
import parsel
import time
ip_list = []
for i in range(1,30):
url = '#/free/inha/{}/'.format(i)
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36'}
response = requests.get(url,headers=header)
html1 = parsel.Selector(response.text)
h = html1.xpath('//table[@class="table table-bordered table-striped"]/tbody/tr')
for t in h:
ip_dict = {}
h2 = t.xpath('./td[4]/text()').extract_first()
h3 = t.xpath('./td[1]/text()').extract_first()
h4 = t.xpath('./td[2]/text()').extract_first()
# print(h2,h3,h4)
ip_dict[h2] = h3+':'+h4
ip_list.append(ip_dict)
time.sleep(0.5)
print(ip_dict)
爬取过程简单,先确定url,找到规律,利用循环爬取数据。用xpath来提取数据,并按照爬虫IP的格式建立字典,用列表存放字典。有一个小问题该网站有爬取速度限制,则可以通过time.sleep来控制爬取速度。
第二步:测试
在request方法中,可以通过proxies参数来伪装ip.可以先建立一个测试的函数,用这个IP去访问一个网站,如果得到快速反映,那么这个IP就可以使用。代码如下:
def check(list):
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.87 Safari/537.36'}
can = []
for i in list:
responses = requests.get('#/',headers = header,proxies = i,timeout= 0.2)
if response.status_code == 200:
can.append(i)
return can
写在最后:构建IP池是学习爬虫必须的,通过proxies参数可以伪装Ip,小编能力有限,还无法利用数据库来存取IP池,只能通过列表的形式呈现给大家。
版权声明:转载文章来自公开网络,版权归作者本人所有,推送文章除非无法确认,我们都会注明作者和来源。如果出处有误或侵犯到原作者权益,请与我们联系删除或授权事宜。
填写下面表单即可预约申请免费试听! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved