python爬虫URL编码和GETPOST请求 | python爬虫实战之三
python爬虫AJAX数据爬取和HTTPS访问
我们首先需要对之前所接触的爬虫的概念,爬取流程、爬虫标准库等内容做一个回顾。
通常我们在大多数情况下编写的爬虫都为聚焦爬虫。
接下来我们通过豆瓣电影来处理JSON数据。
处理JSON数据
查看“豆瓣电影”,看到”最近热门电影”的“热门”。
右键“审查元素”,找到“Network”,刷新一下。
我们可以看到很多的内容,我们针对热门电影这一部分进行分析。
然后复制地址进行操作分析。
通过分析, 我们知道这部分内容, 是通过AJAX从后台拿到的Json数据。
访问的URL是https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&page_limit=50&page_start=0
其中%E7%83%AD%E9%97%A8
是utf-8编码的中文“热门”
服务器返回的JSON数据如下:
轮播组件,共需要50条数据。
其中url的表示如下:
tag标签”热门”,表示热门电影
type数据类型, movie是电影
page_limit表示返回数据的总数
page_start表示数据偏移
我们可以设置page_limit=10&page_start=10
的值。
from urllib.parse import urlencode
from urllib.request import urlopen, Request
import simplejson
ua = "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.75 Safari/537.36"
jurl = 'https://movie.douban.com/j/search_subjects'
d = {
'type':'movie',
'tag':'热门',
'page_limit':10,
'page_start':10
}
req = Request('{}?{}'.format(jurl, urlencode(d)), headers={
'User-agent':ua
})
with urlopen(req) as res:
subjects = simplejson.loads(res.read())
print(len(subjects['subjects']))
print(subjects)
执行结果:
此时就可以获取到内容了,那么我们有必要将爬虫封装吗?
因为每个企业处理的方式可能会不太一样,返回的数据有可能是html,也有可能是JSON。所以说处理的方式必须一致,或者把函数封装在一个方法中才是我们需要思考的重点。往往我们会为一些特定数据、特定网站写一个特定的爬虫。因为,每一个网站的分析和提取方式可能是不一样的。现在我们只是简单做了一个JSON的处理。但如果是网页解析,则是会非常麻烦的,尤其是网页一旦更换网页模板,我们则需要重新去写网页的解析方式。
HTTPS证书忽略
HTTPS使用SSL安全套接层协议, 在传输层对网络数据进行加密。HTTPS使用的时候需要证书, 而证书需要CA认证。
CA(Certificate Authority) 是数字证书认证中心的简称, 是指发放、管理、废除数字证书的机构。
CA是受信任的第三方,有CA签发的证书具有可信性。如果用户由于信任了CA签发的证书导致的损失,可以追究CA的法律责任。
CA是层级结构,下级CA信任上级CA,且有上级CA颁发给下级CA证书并认证。
一些网站, 例如淘宝, 使用HTTPS加密数据更加安全。
我们来进行对一个网站的爬取:
执行结果:
我们去尝试访问百度,是否可以呢?
修改代码:
执行结果:
通过HTTPS访问12306的时候, 失败的原因在于12306的证书未通过CA认证, 它是自己生成的证书, 不可信。而其它网站访问,如https://www.baidu.com/ 并没有提示的原因,它的证书的发行者受信任,且早就存储在当前系统中。
能否像浏览器一样,忽略证书不安全信息呢?
导入ssl模块:
执行结果:
这样,我们就可以通过这样的方式去访问类似的网站了。
配套视频课程,点击这里查看
获取更多资源请订阅Python学习站