IP被封?NO!Python解决各路反爬措施,强势采集拉勾网数据!

保持Cookie与浏览器来源(User-Agent)的说明,如果不加浏览器来源会造成一个IP频繁的假象。

为什么说是假象呢?因为当你用浏览器再次访问是可以正常访问的,自行测试即可。
很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:595948765
欢迎加入,一起讨论 一起学习!

不建议小白阅读此文,不建议不喜欢动手的人阅读此文,因为不做的话,永远不知道事情的真相。

由于网页源代码中并没有我们需要的信息:

image.png

那么我们进行抓包测试:

IP被封?NO!Python解决各路反爬措施,强势采集拉勾网数据!

发现此包中的确包含了我们想要的信息。

注意:

这个post请求当中 表单数据first=ture 是不变的,pn代表页码,当然kd代表我们需要查找的关键词。

请求这个url必须带上referer,这个报文代表我们的url来源。还有我们的浏览器来源user-agent用户代理也要添加!

IP被封?NO!Python解决各路反爬措施,强势采集拉勾网数据!

这样请求,你会发现还是无法正常的获取到数据,那么别忘记我前面说的,保持cookie。在此处有人会直接复制cookie报文,但是别忘了cookie是有时效性的,所以怎么办?

最好的办法就是 提前访问此url的来源,从来源中把cookie取下来,添加到这个请求当中。

最好筛选数据即可:

IP被封?NO!Python解决各路反爬措施,强势采集拉勾网数据!
kw = input('请输入你想要查询的工作:')
for i in range(1, 10):
    data = {
        'first': 'true',
        'pn': i,
        'kd': kw
    }
    headers = {
        'Referer': 'https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.132 Safari/537.36',
    }
    session = requests.session()
    session.get('https://www.lagou.com/jobs/list_python?labelWords=&fromSearch=true&suginput=', headers=headers)
    cookies = session.cookies
    cookies = cookies.get_dict()

    res = session.post('https://www.lagou.com/jobs/positionAjax.json?needAddtionalResult=false', data=data, headers=headers, cookies=cookies).json()
    # print(res)
    res = res.get('content',)
    # print(res)
    res = res['positionResult']['result']
    # pprint.pprint(res)

    cities = jsonpath.jsonpath(res, '$..city')
    print(len(cities))
    salaries = jsonpath.jsonpath(res, '$..salary')
    print(len(salaries))
    positionNames = jsonpath.jsonpath(res, '$..positionName')
    print(len(positionNames))
    print(cities, salaries, positionNames, sep='|')
    # data = pandas.DataFrame({'职位': positionNames, '地址': cities, '薪水': salaries})
    # print(data)
    # data.to_excel(f'{kw}.xls', index=None)
    for positionName, city, salary in zip(positionNames, cities, salaries):
        print(positionName, city, salary)
        with open(f'{kw}.csv', 'a', newline='') as f:
            csvWriter = csv.writer(f, dialect='excel')
            # csvWriter.writerow(['职位', '地址', '薪资'])
            csvWriter.writerow([positionName, city, salary])
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • http协议有http0.9,http1.0,http1.1和http2三个版本,但是现在浏览器使用的是htt...
    一现_阅读 5,887评论 0 3
  • 解析URL 输入URL后,会进行解析(URL的本质就是统一资源定位符) URL一般包括几大部分: protocol...
    小超人的前端之路阅读 4,108评论 0 1
  • 1 Web及网络基础 1.1 使用 HTTP 协议访问 Web Web 使用一种名为 HTTP(HyperText...
    yuhuan121阅读 5,937评论 1 2
  • 第一章、HTTP概述1、Web浏览器、服务器和相关的Web应用程序都是通过HTTP相互通信的,HTTP是现代全球因...
    横冲直撞666阅读 3,848评论 0 1
  • 三伏天,阳光格外的热烈,喜欢阳光的我对于这样的太阳也是有些许的退缩了。想想挺奇怪的,小时候就不怕,甚至是喜爱的...
    love微笑的鱼阅读 2,372评论 0 1