动态网站跟静态网站的区别
在python图片爬虫中,我们爬取的是静态网站。那么静态网站跟动态网站有什么区别呢?其中对于我们写爬虫来说,最大的区别就是用requests.get()
获取到的信息,动态网站是不全的。要想从动态网站里获取到需要的信息,就需要按F12
通过开发者工具进行分析。
开发者工具简单教程
面板 | 说明 |
---|---|
元素面板(Elements) | 该面板可查看渲染页面所需的HTML、CSS和DOM对象,并可实时编辑这些元素调试页面渲染效果 |
控制台面板(Console) | 该面板可记录各种警告与错误信息,并可作为shell在页面上与JavaScript交互 |
源代码面板(Sources) | 该面板可设置调试JavaScript的断点 |
网络面板(Network) | 该面板可查看页面请求、下载的资源文件,以及优化网页加载性能。还可查看HTTP的请求头、响应内容等 |
在这里,我们主要用到网络面板(Network)。
对于网站https://image.baidu.com/search/index?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&ie=utf-8&word=%E7%88%B1%E4%B8%BD%E4%B8%9D
如果我们想爬取上面的图片,首先要进行的就是“抓包”。通俗来讲,就是找到该网站到底把图片藏在哪个文件里了。
下面是我爬取的全过程
一、找到我们想要的url(网址)
首先打开网站,然后按F12
,会出来开发者工具。然后我们点击Network
这时候按F5
刷新一下,就会加载出一些文件。
可以稍微往下滑动一下页面,以便加载文件。这时,我们点击XHR
选项,查看XHR类型的文件(因为大多数信息会放在这类文件中)。点击preview
,我们就能看到里面的json
信息。
然后通过一个解析json的网站解析里面的json信息,就可以找到照片的连接了。链接:https://www.json.cn/
这时,该文件的链接即为我们想要的url(网页)
二、代码部分
先上代码:
import urllib.request
import requests, json
import re
#爬取网页地址
url = "https://image.baidu.com/search/acjson?tn=resultjson_com&logid=7779558212680695729&ipn=rj&ct=201326592&is=&fp=result&queryWord=%E7%88%B1%E4%B8%BD%E4%B8%9D&cl=2&lm=-1&ie=utf-8&oe=utf-8&adpicid=&st=&z=&ic=&hd=&latest=©right=&word=%E7%88%B1%E4%B8%BD%E4%B8%9D&s=&se=&tab=&width=&height=&face=&istype=&qc=&nc=1&fr=&expermode=&force=&cg=star&pn=90&rn=30&gsm="
#防止被网页禁止访问
header = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36'}
html = requests.get(url,headers = header, timeout = 60).json()
obj_list = html['data']
x = 0
for img in obj_list:
if(img):
print(img["thumbURL"])
urllib.request.urlretrieve(img["thumbURL"],'E:\\python\\爬虫数据\\%s.jpg'%x)
x += 1
在刚才的网站中,我们解析了该url中的json信息。在json信息中我们发现,图片的链接是一串蓝色的链接。而且当我们打开该链接,跳转的网页确实是图片。所以我们只需要抓取链接信息就可以了。
显然,图片链接放在了data
中的thumbURL
里(middleURL等也是)。所以我们只需要提取这里面的信息并下载就可以了。