##爬虫
-通用网络爬虫
其的主要目的是将互联网上的资源下载到本地形成一个镜像备份。类似百度等搜索引擎
-聚焦爬虫
其面向特定需求的爬虫程序,与通用爬虫的区别在于对数据进行筛选尽量爬取相关数据
-爬虫优化
1.尽量减少请求次数
2.web页面不好爬取时爬app和h5页面(手机)
##HTTP和HTTPS
--超文本传输协议
HTTP 端口80
HTTPS时加入了ssl安全传输协议 端口443
##get请求方式获取
---get方式一般用于向服务器获取数据
--parse用于url编码
实际使用是将url地址与想要查询的数据信息拼接形成完整地url
例如
# https://tieba.baidu.com/f?ie=utf-8&kw=火影忍者&fr=search
# https://tieba.baidu.com/f?kw=火影忍者&ie=utf-8&pn=50
base_url = 'http://wwww.baidu.com/f?'
# 搜索信息关键字
wd = input('搜索信息关键字')
pn = input('pn值')
q_data = {
'wd' = wd,
'pn' = pn,
}
# 对q_data进行编码使用parse模块
q_data = parse.urlencode(q_data)
# 拼接url
full_url = base_url + q_data
# 构造请求对象
req = request.Request(url=full_url,headers=headers)
# 获取响应对象
response = request.urlopen(req).read().decode('utf-8')
##post请求方式
--post方式需要向服务器发送一些数据
需要注意的是post传数据时不仅要使用parse转码还需要将其转化为字节形式
例如:
base_url = 'http://wwww.baidu.com/'
headers = {
'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:72.0) Gecko/20100101 Firefox/72.0",
}
# post携带数据
kw = input(">>")
data = {
'kw': kw
}
parse_data = parse.urlencode(data)
req = request.Request(url=base_url,data=bytes(data,encoding='utf-8'),headers=headers)
response = request.urlopen(req).read().decode('utf-8')
##cookies
--获取cookies
cookies_object = cookiejar.CookieJar()
cookies_handler = request.HTTPCookieProcessor(cookies_object)
http_handler = request.HTTPHandler()
https_handler = request.HTTPSHandler()
opener = request.build_opener(http_handler,https_handler,cookies_handler)
##ssl
---免认证
# 忽略未经核实的ssl证书认证
ssl._create_default_https_context = ssl._create_unverified_context()
##登录网页爬取开心网
---登录url
https://security.kaixin001.com/login/login_post.php
邮箱:loginemail
密码:password
##有道翻译
'''
分析:
爬取步骤
1 获取url
2 data数据填写 headers数据填写
3 构造request对象生成响应
data中的数据{
i "job"
from "AUTO"
to "AUTO"
smartresult "dict"
client "fanyideskweb"
salt "15842516730329"
sign "60f53618f3fa667e6d3192148c8c1a03"
ts "1584251673032"
bv "e2a78ed30c66e16a857c5b6486a1d326"
doctype "json"
version "2.1"
keyfrom "fanyi.web"
action "FY_BY_REALTlME"
}
headers中的数据{
Host: fanyi.youdao.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:74.0) Gecko/20100101 Firefox/74.0
Accept: application/json, text/javascript, */*; q=0.01
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate # 此行使用时需要注释掉 不要接受压缩信息文件
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Content-Length: 236
Origin: http://fanyi.youdao.com
Connection: keep-alive
Referer: http://fanyi.youdao.com/
# 我写代码时cookie有问题换了别人的cookie值可以正常爬取而我的会生成{‘errorcode’:50}错误
Cookie: OUTFOX_SEARCH_USER_ID=-140868279@123.121.59.79; OUTFOX_SEARCH_USER_ID_NCOO=1766192849.313334; _ntes_nnid=700fcdc75a16b68417175b615d961ea3,1537510225088; YOUDAO_MOBILE_ACCESS_TYPE=1; JSESSIONID=aaa_XsoMzWSA17Bi3OCdx; ___rl__test__cookies=1584251673023
}
难点
因为是post方式提交的数据所以在浏览器调试模式中查找请求方式为post的进行查看
post提交数据中i 为查询的数据 salt、sign和ts 会发生变化
获取salt和sign 的加密方式 在 fanyi.min.js 文件中使用代码格式化工具https://tool.oschina.net/codeformat/js 查找salt与sign关键字
salt: i i = r + parseInt(10 * Math.random(), 10);
sign: n.md5("fanyideskweb" + e + i + "Nw(nmmbP%A-r6U3EUn]Aj")
ts:r r = "" + (new Date).getTime(),
'''
##豆瓣电影分类排行
分析
爬取步骤
1.获取url信息
2.