编者按

众所周知,Python是一门编程语言,操作简洁而清晰、功能专业而强大、入门容易又严谨。2018年,教育部正式将人工智能、物联网、大数据处理划入高中课程,这就意味着,现在的中学生开始就要学习编程语言了,不会点Python,都不好意思说我们是走在时代前沿的人了

Python已广泛应用于大数据、社会网络、数据挖掘、网络爬虫、机器学习、计量经济学等诸多前沿领域,越来越多来自心理学、社会学、经济学、新闻传播学、历史学、艺术学等学科的研究者在用Python开展有趣而富有挑战性的研究议题。显然,编程语言已经在人文社会科学领域显示出了广阔的应用前景。可能我们要问了:对于有计算机编程基础的同学学起来当然不会太费力,而我们人文社科领域的同学呢?学起来会有问题吗?答案是:只要多下一些功夫,一定是可以会哒。

因此,基于人文社科领域的同学对于Python的应用来说,我们不求做个人文社科领域的程序员,我们追求的是将Python这门语言技术应用在我们的研究中。

因此我们推出了“社会科学中的Python应用”系列,将为你系统的描述如何利用Python爬取你想要研究的数据——数据来了以后怎么样用Python来数据清洗,数据处理——数据处理完了以后可以用Python来做哪些可视化?——以及用Python来做诸如文本分析、词频分析、情感分析等等统计分析?——最终形成我们的研究,这样一个系列的研究实现过程。这才是我们关注和强调的!!!

在学习的过程中,如果大家有什么问题,也可以在文末留言,我们会请专业老师解答哦!!

大家好!今天来给大家介绍一下,“爬虫”!

其实这个名词很早就出现在人们的视野中,但是最近发现它的功能太强大了,以至于社会学的小伙伴们都开始觊觎它啦,之后我们会以爬虫、数据清洗、统计这样的思路给大家介绍一个小小的demo,并给大家源码让大家动手尝试啦!是不是很激动呢!

相关软件安装

考虑到非计算机专业的同学平时很少使用Linux系统,本文软件安装和配置以Windows10为主。

我们需要安装Python和scrapy。Python是一款易学易用的脚本语言,scrapy是一个用Python写的开源爬虫框架。Python分为2.x版本和3.x版本,随着时间的推移,越来越多的开发者使用3.x版本的Python写程序,Python官方也会逐渐停止对2.x版本的维护。基于此,本文的Python环境为Python 3.6。安装Python 3.6的方式很简单。浏览器打开https://www.python.org/downloads/,点击“Download Python 3.6.x”,下载完成后打开安装文件根据提示操作即可。接下来我们通过pip安装scrapy。首先右键左下角的Windows徽标,选择“Windows Powershell (管理员)”,打开后,输入pip install scrapy,然后回车即可。

一个简单的demo

首先,在D盘根目录新建一个名为“crawler”的文件夹。双击进入此文件夹,然后按住Shift的同时鼠标右击空白区域,在弹出的菜单中选择“在此处打开Powershell窗口”。接下来,输入scrapy startproject demo然后回车,这句代码创建了一个名为demo的scrapy project。该project的所有文件都存放在demo文件夹下。其中demoscrapy.cfg是scrapy的配置文件,demodemo目录下是一些中间件、管道和爬虫设置等文件,demodemospiders里存放爬虫代码。

我们在spiders目录下新建一个quotes_spider.py文件,在文件里面输入如下代码:

importscrapy

class QuotesSpider(scrapy.Spider):

name = "quotes"

defstart_requests(self):

urls = [

'http://quotes.toscrape.com/page/1/',

'http://quotes.toscrape.com/page/2/',

]

forurlinurls:

yieldscrapy.Request(url=url, callback=self.parse)

defparse(self, response):

filename ='quotes-%s.html'% page

withopen(filename, 'wb') as f:

f.write(response.body)

所有爬虫类都需要继承自scrapy.Spider。QuotesSpider的成员变量name表示爬虫的名字,这里命名为“quotes”。start_requests是爬虫的入口,该函数必须返回一个Request对象的列表或者迭代器。我们在for循环里创建scrapy.Request对象,其中url是Request的网址,callback是回调函数,表示用什么函数来解析网址对应的网页内容,一般固定为self.parse.

接下来,我们需要编写解析函数,即parse。Parse的参数response保存网页内容。这里我们简单地把网页内容保存到本地文件中。

最后,我们运行这个爬虫,看下结果。在crawlerdemo目录下打开Powershell窗口(打开的方法见前文),输入scrapy crawl quotes然后回车。其中scrapy crawl表示运行爬虫,quotes是要运行的爬虫的名字。Powershell窗口会输出一系列调试信息,类似下图

crawlerdemo目录下会多出两个文件quotes-1.html和quotes-2.html,爬取下来的网页。

到目前为止,我们介绍了用scrapy编写爬虫的基本步骤,即先创建一个scrapy project,然后在spiders目录下编写爬虫代码,最后通过scrapy crawl运行爬虫。然而,这只是一个简单的demo,很多方面都没有涉及,例如解析网页内容,follow link等。接下来,我们以一个实际的例子讲解这些技术。

今日头条爬虫

在接下来的例子中,我们打算写一个爬虫,爬取今日头条中和关键词“自主招生”相关的。首先我们用浏览器打开https://www.toutiao.com/,在右侧的输入框输入“自主招生”,查看搜索结果。注意到这时浏览器的网址是

https://www.toutiao.com/search/?keyword=%E8%87%AA%E4%B8%BB%E6%8B%9B%E7%94%9F

可以发现头条搜索结果网址的规律是https://www.toutiao.com/search/?keyword=xxxx,这里xxxx是搜索关键词的编码。注意到头条的搜索结果页面不是一次呈现的,而是需要不断下拉加载更多内容,所以需要用到另一个Python包Selenium来模拟这个行为,可以通过pip install selenium来安装。Selenium需要调用浏览器driver,本文使用Edge浏览器,其driver可以在https://developer.microsoft.com/en-us/microsoft-edge/tools/webdriver/下载,下载完成后将MicrosoftWebDriver.exe放到C:WindowsSystem32目录下。

下面,我们在crawler目录下用scrapy startproject toutiao 创建头条项目。打开toutiaooutiaosettings.py,将ROBOTSTXT_OBEY = True改为ROBOTSTXT_OBEY = False,否则由于头条的robots.txt设置,scrapy将无法爬取头条内容。

因为头条的文章是通过js渲染的,scrapy无法直接处理js,所以在编写spider文件前,我们需要修改中间件文件middlewares.py。

在该文件from scrapy import signals前添加

from selenium import webdriver

from scrapy.http import HtmlResponse

在该文件中的函数process_request中添加相关代码如下:

defprocess_request(self, request, spider):

driver = webdriver.Edge()

driver.get(request.url)

content = driver.page_source.encode('utf-8')

driver.quit()

returnHtmlResponse(request.url, encoding='utf-8', body=content, request=request)

之后我们还需要修改爬虫设置文件settings.py,将

#DOWNLOADER_MIDDLEWARES = {

# 'toutiao.middlewares.ToutiaoDownloaderMiddleware': 543,

#}

三行前的#号去掉,来让下载中间件生效。

通过以上这些操作,scrapy在访问网页时会调用Selenium模拟Edge浏览器,从而拿到js渲染后的网页内容。具体来说,第一行获取一个Edge driver,接着用该driver打开url对应的网址,之后将网页内容(page_source)用utf-8编码,然后关闭driver,最后封装成一个HtmlResponse对象返回,该对象将会作为response参数被传递给parse函数。

为了让scrapy保存输出文件时用utf-8格式,我们还需要在settings.py文件中增加一行(位置可以是任意一个空行)FEED_EXPORT_ENCODING = 'utf-8'。

接下来我们编写spider文件,在spiders目录下创建zzzs_spider.py,编写如下代码:

(本文代码开源在https://github.com/runninglsy/toutiao_spider)

首先看start_requests函数。search_result_url是在头条搜索自主招生的搜索结果网址,我们用get函数模拟浏览器打开该网址,之后time.sleep(3)表示程序暂停3秒,这是为了模拟人类浏览网页的行为,避免被头条服务器识别为爬虫然后被封禁。之后在for循环里模拟下拉操作来加载更多搜索结果,每次下拉后随机等待3-6秒,总共下拉5次(具体次数可以根据需要更改)。下拉操作结束后,我们需要从网页源码中解析出每个搜索结果的超链接,这可以通过ccs选择器做到。首先构造一个选择器Selector,解析的文本为网页源码page_source,然后调用ccs(".rbox’),这里’.rbox’是一个pattern,用来匹配搜索结果页面的绿框内容。

pattern的确定可以借助Chrome的一款插件SelectorGadget,具体用法网上有很多教程,在此限于篇幅就不展开了。最后一步是从匹配到的源码中抽出url字符串,观察网页源码发现其都有类似的模式,因此可以用正则表达式匹配,即代码中的re函数。

parse函数相对简单,借助于SelectorGadget,很容易将每个搜索结果网页的标题和内容抽取出来,判断标题和内容都不是空白后,将标题、内容和url封装成一个字典yield。

最后,在crawleroutiao目录下打开Powershell输入scrapy crawl zzzs –o zzzs.json,回车运行zzzs爬虫,这里-o zzzs.json,表示将爬取到的结果(即parse函数里yield的内容)保存到项目目录下的zzzs.json文件中,类似下图

至此,我们可以看到,我们就把网页的内容,以模拟人类的行为,将文本的内容保存在本地啦,是不是很神奇。当然,这里我们只给了一种示例的内容,完全是因为,想让社会学的小伙伴们能够应用起来,给的示例也不是特别难。想要有更复杂的教程,就可以去网上看咯,当然,跟着我们这个教程学习完毕之后,一定会对整个爬虫、数据清洗并统计相关有用信息的流程会有大致的了解。肯定会有机智的小伙伴们,能举一反三,就灵活应用起来啦!

虽然如此,还是希望大家能期待我们之后对于数据清洗的推文哦。

欢迎大家踊跃投稿,内容有关人文社会科学的即可,可以是学术前沿思想介绍、各种定量研究技术和方法介绍、各种软件(stata、Python、R语言,数据可视化等等)数据处理及分析技巧,可以是网络爬虫技巧,也可以是学术论文写作与发表等相关内容。

投稿要求:

1、务必原创、禁止抄袭;

2、务必准确、详细,有例子,有数据,有截图;

注意事项:

1、所有投稿都会经过本公众号运营团队成员的审核,审核通过才可录用,一经录用,我们会在推文里注明作者署名,并有稿酬提供;

2、邮件请注明投稿,邮件名为“投稿+推文名称+作者+联系方式”;

以人文之情怀

以学术为志业

···········

编辑|王鑫泰

python编程100例头条-python爬虫演示:以爬取今日头条为例相关推荐

  1. 简单爬虫Ajax数据爬取——今日头条图片爬取

    一.Ajax简介 什么是Ajax? Ajax 即"Asynchronous Javascript And XML"(异步 JavaScript 和 XML),是指一种创建交互式网页 ...

  2. python 头条 上传_python 简单爬取今日头条热点新闻(一)

    今日头条如今在自媒体领域算是比较强大的存在,今天就带大家利用python爬去今日头条的热点新闻,理论上是可以做到无限爬取的: 在浏览器中打开今日头条的链接,选中左侧的热点,在浏览器开发者模式netwo ...

  3. Python爬虫从入门到精通——爬虫实战:爬取今日头条图片新闻

    分类目录:<Python爬虫从入门到精通>总目录 本文为实战篇,需提前学习Python爬虫从入门到精通中<基本库requests的使用>和<Ajax数据爬取(一):基本原 ...

  4. python爬取头条好货广告_python 爬取今日头条关键词搜索

    使用python 获取今日头条的关键词的文章 使用进程池 代码如下: # -*- coding: utf-8 -*- import requests import random import requ ...

  5. python3爬虫selenium+chrom爬取今日头条热点新闻保存到数据库

    本人是菜鸟一枚,学了python爬虫有一段时间了,想找个网站练练手,网上搜索今日头条是动态加载的页面,用requests库,需要破as:A175DBDFDEC7024 cp: 5BFE87208254 ...

  6. python爬取今日头条街拍,Python3今日头条街拍爬虫

    学习了大才哥的在线视频教程,特来这里总结分享一下. 不同于上一篇糗事百科的爬虫,这里爬取今日头条街拍需要分析ajax请求得来的数据. 首先这里是爬取的起始页 可以看到当我们往下拉滚动条的时候,新数据是 ...

  7. 利用Ajax爬取今日头条头像,街拍图片。关于崔庆才python爬虫爬取今日头条街拍内容遇到的问题的解决办法。

    我也是初学爬虫,在看到崔庆才大佬的爬虫实战:爬取今日头条街拍美图时,发现有些内容过于陈旧运行程序时已经报错,网页的源代码早已不一样了.以下是我遇到的一些问题. 1.用开发者选项筛选Ajax文件时预览看 ...

  8. 用python爬取今日头条上的图片_Python爬虫:抓取今日头条图集

    今天我们来爬取今日头条图集,老司机以街拍为例. 运行平台: Windows Python版本: Python3.6 IDE: Sublime Text 其他工具: Chrome浏览器 1.网页分析 从 ...

  9. python爬虫今日头条_python爬虫—分析Ajax请求对json文件爬取今日头条街拍美图

    python爬虫-分析Ajax请求对json文件爬取今日头条街拍美图 前言 本次抓取目标是今日头条的街拍美图,爬取完成之后,将每组图片下载到本地并保存到不同文件夹下.下面通过抓取今日头条街拍美图讲解一 ...

最新文章

  1. 2月国内搜索市场:360继续上升 百度下降0.62%
  2. (论坛答疑点滴)为什么设置了DropDownList的AutoPostBack=True还是不能触发SelectedIndexChanged事件?...
  3. linux上使用crontab任务调度
  4. Mac 系统中maven配置环境变量
  5. c语言修仙东君嗯哼,C语言修仙
  6. android 图片变颜色代码,Android -对图片Drawable进行变色
  7. 论文浅尝 | 通过共享表示和结构化预测进行事件和事件时序关系的联合抽取
  8. mysql --max_allowed_packet=32m,如何修改MySQL-max_allowed_packet
  9. 不使用输入框如何实现下拉_如何利用Axure实现下拉子菜单?
  10. python模拟鼠标点击linux_Python模拟实现Linux系统unix2dos功能
  11. Java之校园卡管理系统
  12. 【炫斗之王win7主题下载】
  13. 人脸检测进阶:使用 dlib、OpenCV 和 Python 检测眼睛、鼻子、嘴唇和下巴等面部五官
  14. html历史记录代码,js 实现浏览历史记录示例
  15. 未名湖边的桃花儿开了,就在前几天。
  16. 全面向新能源转型 透过柠檬混动DHT了解长城汽车森林式生态体系
  17. python物理建模初学者指南 pdf 脚本之家_[剑阁]上古卷轴5新手指南并行开坑版!...
  18. TypeScript 学习笔记(四)--- 泛型(Generics)
  19. Linux下安装DB2数据库步骤及常用命令
  20. 周末作业-循环练习题(1)

热门文章

  1. syslog简介——系统日志写入API
  2. 20190405模拟测试
  3. 写在NOIP2018后
  4. 2018年春季个人阅读计划
  5. Struts2请求参数合法性校验机制
  6. .Net高级技术——程序集
  7. 《JavaScript高级程序设计》阅读笔记(二十一):JavaScript中的XML
  8. python selenium过极验滑动验证码
  9. CSS基础学习-8.CSS盒子模型_标准盒子9.CSS怪异盒子
  10. SSH服务理论+实践