写在开头——
“爬虫有话说”
听说同学们一直想见我
因为粉丝实在太多
我终究还是抵不过大家高涨的呼声
历经千山万水,来到大家面前
不知你们,惊不惊喜意不意外?!
“同学们有话说”
4月11日晚7点,信息管理学院研究生会和经济与管理学院研究生会联合开展的Python训练营——爬虫入门线上讲座顺利举办。根据前期同学们在问卷中的反馈情况,本次讲座旨在引导同学们入门爬虫,提高同学们爬取数据的能力,为后续的科研学习和工作奠定基础。
本次讲座包括两个环节:嘉宾分享与互动答疑。
Part 1 嘉宾分享
刘柳滟同学为大家介绍了爬虫的基本原理,以及爬虫常用的Scrapy框架和Xpath路径表达式。针对同学们在课间提出对课上提及的HTML的困惑,刘柳滟同学对HTML的基本知识进行了讲解。讲解过后,刘柳滟同学运用前面所讲的知识,爬取了某网站上的金庸小说,以实操的方式来巩固同学们对所讲知识的理解。
课程最后,刘柳滟同学推荐了一些爬虫学习的资源:
(1)学习网站(W3School之HTML、XPath基础)
链接:https://www.w3school.com.cn/index.html
(2)北京理工大学 嵩天老师的《Python网络爬虫与信息提取》
链接:https://www.icourse163.org/course/BIT-1001870001
(3)学习文档——Scrapy官方文档
链接:https://doc.scrapy.org/en/latest/index.html
(4)书籍推荐《Learning Scrapy》
Part 2 互动答疑
Q1:请问在用爬虫爬取数据时,如果遇到网站有反爬虫的限制时该如何解决呢?
A:一般来说,网站有反爬限制是通过识别到该请求是非人工操作的,然后网站会选择封禁请求的ip来限制爬取。反爬主要采用的方法是将爬虫伪装成“正常人”在浏览页面,有几个方法可以尝试一下:(1)降低发起requests请求的频率,和常人爬取的频率相近,放慢抓取速度,减小对于目标网站造成的压力;(2)在请求头里设置user-agent;(3)设置代理ip池,当一个ip被封之后可用其他的代理ip继续爬取数据,这样做需要多个稳定的代理ip。
Q2:请问当服务器返回json格式的数据乱码该如何操作呢?(即返回的字符串中有bytes类型的数据导致的乱码)
A:这个问题主要是字符编码设置不对造成的。当前文件的编码格式是unicode,我们要把存储的文件编码格式设置为utf-8。在scrapy框架中修改也比较简单,在settings.py文件里加上“FEED_EXPORT_ENCODING = ‘utf-8’”语句,导出文件的编码格式就是utf-8,这样操作后爬取的数据就会显示正常。
Q3:请问网站除了用封禁机制,还会采取哪些常见的信息保护措施?遇到了又该如何解决呢?
A:在爬取网站数据的时候,有的网站是静态页面,会将所有内容以html的形式反馈给你,直接查看response一般就是网页的全部代码了;但很多网页其实并不会反馈完整的代码内容,这种是动态页面,这些网站的response再打开的时候和你在网页看到的不一样。以微博官网为例,网页会通过ajax方式进行动态加载,也就是说用户需要上下滑动网页才能加载相关内容。我们可以通过模拟浏览器点击的方式来获取这部分数据,在Python里面对应的是selenium框架,感兴趣的同学可以自学并尝试爬取数据。
Q4:请问在爬取数据时ip被封了,有什么好的解决办法嘛?
A:最简单的方式是更换入网方式,比如你刚开始用有线网进行爬取,被封之后可以用无线网的方式继续爬取。从代码层面来说,可以通过代理ip的形式来解决ip被封的问题。
刘柳滟同学深入简出的讲解方式,激发了同学们浓厚的学习兴趣。通过本次爬虫入门线上讲座,相信同学们对爬虫相关知识有了基本的了解,对如何爬取数据也有了一定的概念。希望大家在本次线上讲座中能学有所获,日后也能将所学知识应用到自身的学习科研和工作中。
错过讲座的小伙伴可点击以下链接查看腾讯课堂的回放:
https://ke.qq.com/webcourse/index.html?cid=1350342&term_id=101447923&lite=1&from=800021724#taid=13131210&vid=5285890800300949176
更多资料在QQ群(1083706928)等你哦!
内容整理:郑心茹
文编:刘奕
排版:邓静仪