Day2-《青春有你2》选手信息爬取
1.请在下方提示位置,补充代码,完成《青春有你2》选手图片爬取,将爬取图片进行保存,保证代码正常运行
2.打印爬取的所有图片的绝对路径,以及爬取的图片总数,此部分已经给出代码。请在提交前,一定要保证有打印结果,如下图所示:

深度学习一般过程:
收集数据,尤其是有标签、高质量的数据是一件昂贵的工作。
爬虫的过程,就是模仿浏览器的行为,往目标站点发送请求,接收服务器的响应数据,提取需要的信息,并进行保存的过程。
Python为爬虫的实现提供了工具:requests模块、BeautifulSoup库
上网的全过程:
普通用户:
打开浏览器 --> 往目标站点发送请求 --> 接收响应数据 --> 渲染到页面上。
爬虫程序:
模拟浏览器 --> 往目标站点发送请求 --> 接收响应数据 --> 提取有用的数据 --> 保存到本地/数据库。
爬虫的过程:
发送请求(requests模块)
获取响应数据(服务器返回)
解析并提取数据(BeautifulSoup查找或者re正则)
保存数据
本实践中将会使用以下两个模块,首先对这两个模块简单了解以下:
request模块:
requests是python实现的简单易用的HTTP库,官网地址:http://cn.python-requests.org/zh_CN/latest/
requests.get(url)可以发送一个http get请求,返回服务器响应内容。
BeautifulSoup库:
BeautifulSoup 是一个可以从HTML或XML文件中提取数据的Python库。网址:https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/
BeautifulSoup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,其中一个是 lxml。
BeautifulSoup(markup, "html.parser")或者BeautifulSoup(markup, "lxml"),推荐使用lxml作为解析器,因为效率更高。
这个题目可以说对新人算是较为友好,爬虫程序的绝大部分已经给出,但其中类选择器以及爬取图片的第三部分需要自行完成:
一、爬取百度百科中《青春有你2》中所有参赛选手信息,返回页面数据
这一段先使用requests请求了百度百科的http静态页面,然后对静态页面使用BeautifulSoup(BeautifulSoup通过CSS选择器的形式来爬取相应元素 不支持xPath)通过类选择器选择类名为'table-view log-set-param'的元素下的表格table元素并进行返回:tables = soup.find_all('table',{'class':'table-view log-set-param'})
注意此处爬取的是静态页面中的元素,request不像selenium这种使用浏览器内核来进行爬虫的库,是一个http的请求库,本身不带有渲染Javascript的功能,也就是说假如网页的某些链接不是通过静态页面返回而是通过Javascript在浏览器对静态页面解释后通过JS进行动态加载的就会无法获取。这里会跟该题的坑相关,下面再进行讲解。
二、对爬取的页面数据进行解析,并保存为JSON文件
这一段就是单纯的数据处理了,将表格元素的行和列tr,td各种拼接最后保存成json文件。
三、爬取每个选手的百度百科图片,并进行保存
!!!请在以下代码块中补充代码,爬取每个选手的百度百科图片,并保存 !!!
这个程序有几个需要注意的点:一是我们爬取的链接是同一个域名的路由,可以理解成文件夹的相对路径,比如C盘下有a b两个文件夹,那命令行位于C盘根目录时可以使用cd a或者cd b进行访问,因此我们在这里必须将原url的域名拼接上我们的路由构成新的url;二是图册页面中的缩略图都是类似
这样的形式,?后面其实表示我们对图片的大小缩放resize操作,因此只要将其去掉就可以通过缩略图的元素通过一张图片获取多张图片。
另外此处暗藏一个坑,假如爬取王姝慧的百度百科图册时会发现她有38张图片,但http静态网页只会返回前30张的url,后面8张是通过JS进行动态加载的,而我们的request只能抓取静态网页不能渲染JS,因此我们是无法通过渲染JS的方式来获取这8张图片的。(当然,除了渲染JS的方法,还可以通过以类似异步请求接口逆向的方法进行获取,这在Day5的作业中也会用到)。

由于时间关系,我这里也只是做了一个简单的if判断,没有再对后面8张图片进行爬取,而这会导致最终爬取的结果数量实际是不够的。
四、打印爬取的所有图片的路径
最后这部分为打印爬取图片的路径,比较简单,这个程序的讲解到此为止。
最后更新于
这有帮助吗?