爬虫小例1:ajax形式的网页数据的抓取
---恢复内容开始---
下面记录如何抓取ajax形式加载的网页数据:
目标:获取“https://movie.douban.com/typerank?type_name=%E5%89%A7%E6%83%85&type=11&interval_id=100:90&action=”下的网页数据
第一步:网页数据分析-----》特点:当列表条滚动到页面下方时数据自动加载,而页面的url并未发生变化
第二步:利用Fiddler抓包,如下图:
图一:请求数据
图二:form表单
通过抓包获取到数据规律:图二from表单中start对应数据和图一中的url中start对应数据随着每次加载而递增,其他数据未发生变化。对应这种规律我们便可构造相应请求获取数据
需注意,数据形式为json
代码如下:
1).urllib形式
import urllib2 import urllib #此处的url为上述抓包获取的url去掉start以及limit,start以及limit数据后边以form表单的形式传入 url = ' https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=' #请求投信息,伪造成浏览器,方式被反爬虫策略拦截 headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"} #构建form表单 formdata = { "start":"20", "limit":"20" } #urlencode()urllib中的函数,作用:将key:value形式的键值对转换为"key=value"形式的字符串 data = urllib.urlencode(formdata) #构建request实例对象 request = urllib2.Request(url,data=data,headers=headers) #发送请求并返回响应信息 response = urllib2.urlopen(request) #注意此处的数据形式并不是html文档,而是json数据 json = response.read() print html
2).request库的get请求代码
#coding=utf-8 import requests url = ' https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=' headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"} data = { "start":"20", "limit":"20", } response = requests.get(url,params = data,headers = headers) print response.text
3).request库的post请求
#coding=utf-8 import requests url = ' https://movie.douban.com/j/chart/top_list?type=11&interval_id=100%3A90&action=' formdata = { "start":"20", "limit":"20" } headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0"} response = requests.post(url,data=formdata,headers=headers) print response.text
---恢复内容结束---