Python爬虫爬取AJAX
1、首先把需要的库安装一下,pip isntall requests,pip install pyquery ,urlencode是python3内置了不用安装
2、然后我们分析下要爬取的网页,我这里以豆瓣电影为例,打开页面打开浏览器开发者工具,点Network选项,然后刷新网页,再选取XHR这种就是AJAX传来的数据了,经分析我们要爬取的首页电影网址为:https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&page_limit=50&page_start=0
https://movie.douban.com/j/search_subjects?这条后面跟着参数,不同参数返回不同内容,这条就是返回了 热门的50条内容

3、接下来开始写代码
先引入需要的库
from urllib.parse import urlencode
from pyquery import PyQuery as pq
import requests
URL和请求头伪装浏览器访问
hot_url='https://movie.douban.com/j/search_subjects?'
headers = {
'Host':'movie.douban.com',
'Referer':'https://movie.douban.com/',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36',
'X-Requested-With':'XMLHttpRequest',
}
获取json方法 ,params里参数可以根据需求修改,此处URL由最上的URL加上params参数合成一个新的请求网址,然后再请求这个网址返回json数据
def get_page():
params = {
'type': 'movie',
'tag':'豆瓣高分',
'page_limit': '50',
'page_start': '0',
}
url = hot_url + urlencode(params)
try:
response = requests.get(url,headers=headers)
if response.status_code == 200:
return response.json()
except requests.ConnectionError as e:
print('Error',e.args)
定义一个解析方法,遍历数据,获取我们想要的结果,我这里只获取了标题、评分、图片地址
def ps_page(json):
if json:
item = json.get('subjects')
for it in item:
moive={}
moive['title'] = it.get('title')
moive['rate'] = it.get('rate')
moive['cover'] = it.get('cover')
yield moive
最后遍历打印结果
if __name__ == '__main__':
json = get_page()
res = ps_page(json)
for re in res:
print(re)


