Ajax数据爬取
在spider爬取数据的过程中,有些网页的数据是利用Ajax动态加载出来的,所以,在网页源代码中可能不会看到这一部分的数据,因此,我们需要使用另外的方式进行数据多爬取。
以豆瓣电影的网页源码获取为例 https://movie.douban.com/ ,我们查看网页源代码,会发现网页中所包含的数据根本不在源代码中,比如查询囧妈,会显示查询结果为0。这时候我们就要注意他可能是使用Ajax进行动态加载的数据。
F12进入开发者工具,按照下图步骤进行查看
双击第3步骤中的链接,会发现有一些tag标签,最后会发现有一些数据包含其中。
有数据的这些连接就是Ajax动态加载的结果了。下面有一个小例子进行简单的运用。
1 ''' 2 @Description: 爬取异步加载数据——以豆瓣网为例 3 @Version: 1.0 4 @Autor: Montoin Yan 5 @Date: 2020-02-01 18:18:05 6 @LastEditors : Montoin Yan 7 @LastEditTime : 2020-02-03 18:50:01 8 ''' 9 from urllib import parse 10 from urllib.request import urlopen,Request 11 import simplejson 12 import random 13 14 #设置多个请求头,防止被反扒措施进行拦截 15 ua_list = [ 16 "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0", 17 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.29 Safari/537.36", 18 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362", 19 "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400" 20 ] 21 #随机pick one 22 ua = random.choice(ua_list) 23 24 #以https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&page_limit=10&page_start=0 为例 25 #将链接进行分割,将Ajax需要传递的参数存储到字典中 26 url = "https://movie.douban.com/j/search_subjects" 27 d = { 28 'type':'movie', 29 'tag':'热门', 30 'page_limit':'10', 31 'page_start':'0' 32 } 33 request = Request('{}?{}'.format(url,parse.urlencode(d)),headers={ 34 'User-agent':ua 35 }) 36 37 with urlopen(request) as response: 38 subjects = simplejson.loads(response.read()) 39 print(len(subjects['subjects'])) 40 s = subjects['subjects'] 41 for i in s: 42 print(i)
结果可以参照以下内容:
HTTPS跳过证书验证
引用python自带的ssl库,进行不信任证书的忽略,以12306为例。
1 ''' 2 @Description: HTTPS利用SSL库进行默认信任证书的模拟 3 @Version: 1.0 4 @Autor: Montoin Yan 5 @Date: 2020-02-03 20:18:52 6 @LastEditors : Montoin Yan 7 @LastEditTime : 2020-02-03 20:32:47 8 ''' 9 10 from urllib.request import urlopen,Request 11 import random 12 import ssl 13 14 url = "http://www.12306.cn/mormhweb/" 15 ua_list = [ 16 "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0", 17 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.29 Safari/537.36", 18 "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.102 Safari/537.36 Edge/18.18362", 19 "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3741.400 QQBrowser/10.5.3863.400" 20 ] 21 #随机pick one 22 ua = random.choice(ua_list) 23 request = Request(url,headers={ 24 'User-agent':ua 25 }) 26 27 #忽略不信任的证书 28 context = ssl._create_unverified_context() 29 30 #利用urlopen的最后一个参数,强调上下文使得在链接传递的时候忽略证书 31 with urlopen(request,context=context) as response: 32 print(response._method) 33 print(response.read())
来源:https://www.cnblogs.com/yandashan666/p/12257348.html