前言
还在去网站上找网络美女看嘛,却发现网站上找到的并不是特别好看,而且比较模糊,下面教你们如何用爬虫去爬取网络美女图片。
一、准备工作
安装requests库(用于请求静态页面)
pip install requests -i https://mirrors.ustc.edu.cn/pypi/web/simple
安装lxml库(用于解析html文件)
pip install lxml -i https://mirrors.ustc.edu.cn/pypi/web/simple
安装与配置selenium(用于请求动态页面)
pip install selenium -i https://mirrors.ustc.edu.cn/pypi/web/simple
selenium 需要与浏览器配合使用,在以前的爬虫教程中,往往把 selenium 和 PhantomJS 配合使用,PhantomJS 是一款无界面的浏览器,能否执行js脚本,从而可以实现加载和渲染动态页面。但是由于最新版 selenium 已经不再支持 PhantomJS,所以必须使用其他浏览器代替,本教程使用的是Firefox浏览器,Firefox浏览器也支持无界面模式( headless模式 ),用于爬虫非常方便。另外Chrome也是支持的。详细的安装与配置教程请参考:
Python爬虫利器五之Selenium的用法
二、页面分析
打开妹子图页面,如下图。页面的正文部分列出了33个美女图集。每个页面共有33个图集,总共有33个页面,所以总共有1089个图集。图片的链接就包含在每个图集中。
在页面上单击右键,选择 审查元素按键,或直接按 F12进入调试模式。页面结构如下:
点进任意一个图集中,进入调试模式,可以看出页面结构如下:
源码详解
从前面的页面分析中可以看出,这个网站的页面结构其实很简单,我们只需要依次打开第1到第33个页面,得到每个页面的html源码,然后从html源码中提取出每个页面上包含的图集的链接列表(共33个),然后再依次打开第1到第33个图集详情页面,但是图集详情页面中的图片列表是用js动态加载的,我们需要使用selenium加载这个动态页面,等该页面加载完毕之后再得到该页面的html源码,然后从图集详情页面中提取出每张图片的链接,最后再依次下载每张图片保存即可。
整个流程其实并不复杂。
使用requests下载静态html页面
该函数用于下载图集列表页面,这个页面是静态的,可以直接通过 requests.get(url) 函数抓取。但是有一点需要注意,为了把我们的爬虫伪装成正常的浏览器请求,避免我们的爬虫被服务器禁止,我们需要给 requests 添加http请求头,其中包含伪造的 User-Agent 浏览器标识
如果你对python感兴趣,我这有个学习Python基地,里面有很多学习资料,感兴趣的+Q群:688244617
def download_page_html(url):
phtml = None
try:
requests_header["User-Agent"] = random.choice(user_agent_list) # 选择一个随机的User-Agent
# print(requests_header)
page = requests.get(url=url, headers=requests_header) # 请求指定的页面
# print(page.encoding)
page.encoding = "gb2312" # 转换页面的编码为gb2312(避免中文乱码)
phtml = page.text # 提取请求结果中包含的html文本