python爬虫被检测频繁登录解决方法

当爬虫遇到频繁登录

下方是对静态网页爬取的python代码(符合爬虫协议规定),注释阐释了我的思路以及碰到的一些问题

import requests
from lxml import etree
import time
import random

url = 'http://www.job5156.com/qiye/hebei-0/'
headers = {
    'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36'
}
# 设置代理池 为防止网页出现  频繁登录 而不能获取部分源码的情况
procxy = [
    {'https':'36.6.147.197:28546'},
    {'https':'223.241.117.118:18118'},
    {'https':'114.239.172.141:38001'},
    {'https':'116.113.27.170:47849'},
    {'https':'223.241.116.9:8010'}
]
#随机获取代理
http = random.choice(procxy)
#返回请求
response = requests.get(url = url,headers = headers,proxies = http)
random = random.randint(3,10)
# time.sleep(random)  之前出现频繁登录无法获得部分源码的情况:  1.未设置代理2.响应时间一直相同,被检测为机器人   结果是1影响的  


#对html自动修正(如缺失节点可以自动填上),并构造一个xpath对象
html = etree.HTML(response.text)
# print(response.text)

#xpath对象可以获取节点
com_name = html.xpath('//div[@class = "line_com"]/a[@class = "com_name"]/text()')
com_job = html.xpath('//div[@class = "line_cate"]/a/text()')
# print(type(com_name),com_name)   可以发现com_name的类型是个list,com_job同理 那么我们可以进行遍历打印或者存储至文档及其他介质中
for i in range(0,len(com_name)):
    print(str(i)+"  "+com_name[i]+"   "+com_job[i])

#上述是对第一页网页进行爬取,那么后面的网页可以发现规律,每点击  下一页  网页的路径会变,兄弟姐妹们实操下就能发现规律
for j in range(2,67):
    #发现规律之后 对网页进行遍历 range的范围是[2,67),左闭右开  剩下的就是按上面的逻辑来了
    url = 'http://www.job5156.com/qiye/hebei-0/pn'+str(j)
    response = requests.get(url = url,headers = headers,proxies = http)
#     time.sleep(random)
    html = etree.HTML(response.text)

    com_name = html.xpath('//div[@class = "line_com"]/a[@class = "com_name"]/text()')
    com_job = html.xpath('//div[@class = "line_cate"]/a/text()')
    for k in range(0,len(com_name)):
        print(str(k)+"  "+com_name[k]+"   "+com_job[k])
    



拓展

1.西刺代理(https://www.xicidaili.com/)代码中代理池中的代理是从该网站得到的,当然还有其他免费代理
的网站,这些共享代理往往寿命较短,指不定哪天我代码中的失效了,可以尝试换下代理
2.对网页的遍历中 range(2,67)这是一段固定遍历,若网页内容(此网页内容是公司)增加或减少,该如何调节这个遍历数呢
3.其实代码中的 time.sleep(random) 只是延长了网站响应到下一步的过程,而不是让网站响应的时间随机,也就是说代码中的逻辑和我注释的逻辑(响应时间一直相同,被检测为机器人)是不一致的,希望别对大家造成影响
4.在对网页遍历的代码块会涉及到全局变量和局部变量的问题,因为这段代码我复制了上面那段,很多变量name是一致的,像这种做法有时候会存在全局变量引用问题
5.对可能出现异常的代码块加上except,对代码的维护性会更好

总结

	这段代码展示的只是一种思路,它在我发布这段代码的时候还是可行的,或许在若干时间后,由于反爬机制,代理寿命
的丧失,网站的更改以及其他情况出现相关问题。爬虫与反爬一直处于博弈状态,它们都具有时效性,没有哪种爬虫或者反
爬永远可行,要想在这高速发展的互联网大环境下让自己的爬虫不被淘汰,更重要的是对反爬的理解,与时俱进,一步步突破
自己,才不会被大潮流所淹没。
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值