一、本文编写缘由
很久没有写过爬虫,已经忘得差不多了。以爬取pixiv原创插画网站为着手点,进行爬虫复习与实践。
二、获取网页源码
爬取网页数据的过程主要用到request库,一个简单的网页爬虫实现过程大致可以分为一下步骤:
- 指定爬取url
- 发起爬取请求
- 存储爬取数据
下面以爬取pixiv网站为例,获取pixiv网站首页源码并存储到pixiv1.html文件中。
import requests
if __name__ == "__main__":
# step 1: 爬取网页数据
# 指定url
url = 'https://www.pixiv.net/'
# 发起请求
home_text = requests.get(url).text
# step 2: 解析爬取数据
# step 3: 存储爬取数据
save_path = './pixiv1.html'
with open(save_path, 'w', encoding='utf-8') as fp:
fp.write(home_text)
print('下载成功!')
经过上述操作,将会在当前目录下生成一个“pixiv1.html”文件。双击文件打开,会发现是下图这样子,访问该网站首先需要登录,所以会跳入到登录注册页面,且页面都为日文。
针对这个问题,右键检查网页,进入network,然后刷新页面,发现有数据更新,点击查看Headers。发现request headers里面带有cookie,因此需要伪装UA,设置请求头header,将request header复制到代码块中。
# 指定url
url = 'https://www.pixiv.net/'
headers = {
'user-agent': '你的user-agent',
'referer':'https://www.pixiv.net/',
'sec-fetch-dest':'document',
'sec-fetch-mode':'navigate',
'sec-fetch-site':'same-origin',
'sec-fetch-user':'1',
'upgrade-insecure-requests':'1',
'accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
'accept-encoding':'gzip, deflate, br',
'accept-language':'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7',
'cache-control':'max-age=0',
'cookie': '你的浏览器cookie'
}
# 发起请求
home_text = requests.get(url, headers=headers).text
再次打开保存的网页文件“pixiv2.html”,发现页面并不像我们登录进去的一样,而是如下图所示。
小朋友,你是不是有很多问号......
三、爬取单张缩略图片
由上一个章节可知,首页的插画部分并不是首页的直接源码,而是引入了另外的网页地址和脚本。这里,通过进入到网页并进行分析,右键图片再点击检查获取图片地址,该图片比较小,为缩略图片。复制图片地址,并粘贴到浏览器的地址栏,可显示图片。