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

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

作者: 一起学编程 | 来源:发表于2020-04-22 15:25 被阅读0次

    保持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])
    

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/yubiihtx.html