本篇文章小编给大家分享一个使用python的requests包来爬取ajax的方法,感兴趣的小伙伴可以耐心阅读一下这篇文章,小编也把完整的代码分享出来了,大家也可以参考参考 。
文章插图
使用python的requests包来爬取ajax的具体方法如下:
首先,我们需要定义一下自己的headers,不过值得我们注意到是,有一个字段需要我们根据自己的需求来设计一个列表用于随机调换,就是User-Agent 。
我们再来了解一下一半ajax网页的特点:一般在network中xhr网络中有一些ajax请求,其中它们request_url必然是ajax的请求接口,并且headers里面的referer是跳转前的url 。
而且ajax数据的抓取爬虫和普通的网页爬取多了一个url,一个是referer的url,放在headers中,另外一个则是ajax_url 。这也是一个主要访问的 。
【python怎么爬取ajax?运用python的requests包来实现】不过最重要的一点还是ajax一般返回json数据,所以我们抓取下来的数据解析形式有所不同 。我们可以直接将集转换成json结束集就好了 。
另外一个就是访问参数,若请求中带有param,就将其构造 。若没有可忽略 。本例中有参数,注意参数字典构造方法
下面小编就给大家分享一个完整的代码:
from urllib.request import quote,unquoteimport randomimport requests keyword = quote('java').strip()print(keyword, type(keyword))city = quote('郑州').strip()print(unquote(city)) refer_url = 'https://www.lagou.com/jobs/list_%s?city=%s&cl=false&fromSearch=true&labelWords=&suginput=' % (keyword, city)ajax_url = 'https://www.lagou.com/jobs/positionAjax.json?city=%s&needAddtionalResult=false' %cityuser_agents=[ 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/ 55.0.2883.87 Safari/537.36', 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/ 65.0.3325.181 Safari/537.36', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/ 58.0.3029.110 Safari/537.36 Edge/16.16299',] data ={ 'first': 'true', 'pn': '1', 'kd': keyword,}headers={ 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Accept-Encoding': 'gzip, deflate, br', 'Accept-Language': 'zh-CN,zh;q=0.9', 'Connection': 'keep-alive', 'Content-Length': '46', 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'Host': 'www.lagou.com', 'Origin': 'https://www.lagou.com', 'Referer': refer_url, 'User-Agent': user_agents[random.randrange(0,3)], 'X-Anit-Forge-Code': '0', 'X-Anit-Forge-Token': 'None', 'X-Requested-With': 'XMLHttpRequest',}resp = requests.post(ajax_url,data=https://www.ycpai.cn/python/data, headers=headers) result = resp.json()print(result)# print(result)#result 就是**终获得的json格式数据item = result['content']['positionResult']['result'][0]print(item)#item就是单个招聘条目信息print("程序结束")
推荐阅读
- Python变量命名规则是什么?Python变量如何正确命名
- Python和Anaconda的区别是什么?这几点比较关键
- Python静态方法和类方法区别在哪?关键在于这几点
- python怎么查看变量类型?这篇文章教给你两个方法
- Python中replace函数的作用是什么?replace函数怎么用
- Python复数该如何去计算?Python复数如何求解
- python中input函数怎样输入两行?这个方法你一定要看
- python文件如何修改?这篇文章值得你阅读
- python中列表如何去除重复?这个方法一定要学会
- 拳王泰森去世了没有 拳王泰森怎么去世的