python爬虫学习(三)
tip
- 要是觉得找elements中对应部分有点麻烦,可以用ctrl+shift+c然后点网页你想要的部分,开发者模式中就会跳转过去了。
1.防盗链
现在很多网站启用了防盗链反爬,防止服务器上的资源被人恶意盗取。什么是防盗链呢?
- 从HTTP协议说起,在HTTP协议中,有一个表头字段:referer,采用URL的格式来表示从哪一个链接跳转到当前网页的。通俗理解就是:客户端的请求具体从哪里来,服务器可以通过referer进行溯源。一旦检测来源不是网页所规定的,立即进行阻止或者返回指定的页面。
2. 三里屯抓拍图爬取
网址:http://blog.sina.com.cn/s/blog_01ebcb8a0102zi2o.html?tj=1
可以尝试按先前的方式先去爬取试试,你会发现无法爬取想要的照片,当你用开发者模式去看的时候,你会发现她有两个url,你尝试两个src会发现两个都得不到正确的图片,这就是防盗链的作用,所以我们需要再header中加入referer
那么如何去找到referer呢?你需要在network中找到要爬取的图片,可以通过预览迅速辨认是否自己要找的图片,具体可按下图:
1 | import requests |
3. cookie
- 什么是cookie?
- cookie的本质就是一组数据(键值对的形式存在)
- 是由服务器创建,返回给客户端,最终会保存在客户端浏览器中。
- 如果客户端保存了cookie,则下次再次访问该服务器,就会携带cookie进行网络访问。
- 典型的案例:网站的免密登录
tip
在通过的之前学习后,相信对于爬虫代码的基础部分已经有所掌握,对于这些开源的数据在有爬虫技术前真要获取也是可以的,比如说你一个个人工去搜集得到,但这种机械化又大量的工作正是促使爬虫技术的诞生,更进一步,一些爬虫的技术代码是否也是如此呢?据此,我想要介绍一个工具‘curlconverter’
网址:https://curlconverter.com/
通过上述步骤再复制的网站中,就可得到如下一些基础的代码,也可以提高一定的效率。
案例:雪球网数据
#ps:用谷歌和edge可能会无法用开发者模式获取数据,可能是一种反爬机制,但博主用联想浏览器可以打开,并且代码可以成功运行。
网址:https://xueqiu.com/
如上图一样找到curl,然后到之前的给出的网站获得对应的代码再进行修改即可,代码如下:
1 | import time |
但是虽然目前的cookie都能直接用,但实际上在主流的网站,对于cookie可能是有防备的,比如cookie可能会有有效期,或者说cookie就是一次性的,当这种情况下,对于,这样获取的cookie可能就无法成功用于代码中
正如先前所言,所有爬虫代码的不成功都是拟人度不够,比如说现在的代码都是根据请求头和网址直接进去数据所在的页面,但是正常流程应该是打开网站的首页,再点击之后的,所以通过代码先对主页面进行访问,浏览器会给代码一个全新的cookie,代码通过这个cookie就可以更稳定运行了
1 | import requests |
基于session对象实现自动处理cookie。
- 1.创建一个空白的session对象。
- 2.需要使用session对象发起请求,请求的目的是为了捕获cookie
- 注意:如果session对象在发请求的过程中,服务器端产生了cookie,则cookie会自动存储在session对象中。 - 3.使用携带cookie的session对象,对目的网址发起请求,就可以实现携带cookie的请求发送,从而获取想要的数据。
注意:session对象至少需要发起两次请求
- 第一次请求的目的是为了捕获存储cookie到session对象
- 后次的请求,就是携带cookie发起的请求了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62import requests
# 第一次请求
import requests
session = requests.session()
headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
'Pragma': 'no-cache',
'Sec-Fetch-Dest': 'document',
'Sec-Fetch-Mode': 'navigate',
'Sec-Fetch-Site': 'none',
'Sec-Fetch-User': '?1',
'Upgrade-Insecure-Requests': '1',
'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
'sec-ch-ua': '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"macOS"',
}
url = 'https://xueqiu.com/hq'
# session:自动管理session
session.get(url, headers=headers)
# 第二次请求,携带动态cookie
headers = {
'accept': 'application/json, text/plain, */*',
'accept-language': 'zh-CN,zh;q=0.9',
'cache-control': 'no-cache',
#'cookie': 'u=851695628862640; HMACCOUNT=2A4FB6ADBAE70C94; cookiesu=591728562312333; device_id=ce2bbbc0e3a672b689052fc9204f8b61; xq_a_token=7716f523735d1e47a3dd5ec748923068ab8198a8; xqat=7716f523735d1e47a3dd5ec748923068ab8198a8; xq_r_token=0483ea3986e45954e03c9294444a1af14d7579d3; xq_id_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJ1aWQiOi0xLCJpc3MiOiJ1YyIsImV4cCI6MTczMzEwMDgxNywiY3RtIjoxNzMxNzY2NTA1ODkyLCJjaWQiOiJkOWQwbjRBWnVwIn0.GqQPJ3wNkRxoWlb8W32s66nnlZCr9_8QhlChq5S2hdVOPBA4JcZFM2d9XaxkULzYt9KxFnDKa4dx_t4BDWfK-Bm9pV5YiheFBwvePRwnFldsSgVuw-SJBHTthJCo3wOzFkxubRyFtC248rKmuNPSaD1x7QtTHFk77O-5917lxJlip61oEZ-o1c51N31vGcQfxjzK2Do1xwPaU-3MZK_-jL3wuMZEcbRCbBTpD1GQj7PrATbajsO4Z1x7Xf58CmrLHeBz6DXIhNDf28MkxoEjSzT-mSNsCEIMXp0dbSQqhEp0D1hX3LqcCKLHebCRTiR0dMPMMIR1E_0a4-swY9Goag; Hm_lvt_1db88642e346389874251b5a1eded6e3=1731766508; is_overseas=0; ssxmod_itna=iqGxyDBiitG=KAIK0dGQDHYySeewx7IXIKAmYedND/SGIDnqD=GFDK40EoSxPd+3iYDxR3hGl7A4+F1/n8GwFoFx+OpxXSQxiTD4q07Db4GkDAqiOD7uqhoD445GwD0eG+DD4DWzqDU/fhKDjGHCcp5HAOIHfh5DbhKODiK8DYvpDAThVPYzCcxzDDapDlKhDWPODQHsAxKDExGOX+ImBxGaFfSLmbKDEj+Cmb3DvcOOG12z/xY8/txYeWpkU6nePchYYjixGn0Dzn293EDyF704dDrP3r0FkrZeee3lzYD=; ssxmod_itna2=iqGxyDBiitG=KAIK0dGQDHYySeewx7IXIKAmYedG9WMtDBL80D7prMqaG2YzxFqG7eeD; Hm_lpvt_1db88642e346389874251b5a1eded6e3=1731766579',
'origin': 'https://xueqiu.com',
'pragma': 'no-cache',
'priority': 'u=1, i',
'referer': 'https://xueqiu.com/',
'sec-ch-ua': '"Chromium";v="130", "Google Chrome";v="130", "Not?A_Brand";v="99"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"macOS"',
'sec-fetch-dest': 'empty',
'sec-fetch-mode': 'cors',
'sec-fetch-site': 'same-site',
'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36',
}
params = {
'page': '1',
'size': '10',
'type': 'sha',
'order_by': 'percent',
'order': 'desc',
'md5__1632': '7q+xuQKDqmwOD/Wi4BKw1QDcWODO7fAeD',
}
response = session.get(
'https://stock.xueqiu.com/v5/stock/screener/quote/list.json',
params=params,
headers=headers,
)
print(response.text)