首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用python scrapy爬取知乎提问信息

前文介绍了python的scrapy爬虫框架和登录知乎的方法.

这里介绍如何爬取知乎的问题信息,并保存到mysql数据库中.

首先,看一下我要爬取哪些内容:

如下图所示,我要爬取一个问题的6个信息:

问题的id(question_id)

标题(title)

问题描述(intro)

回答个数(answer_num)

关注人数(attention_uv)

浏览次数(read_pv)

爬取结果我保存到mysql数据库中,表名为:zhihu_question

如下图中,红框里的就是上图问题的信息.

(回答个数,关注着和浏览次数数据不一致是因为我是在爬取文章信息之后的一段时间才抽出来时间写的文章,在这期间回答个数,关注着和浏览次数都会增长.)

爬取方法介绍

我用的是scrapy框架中自带的.

selectors通过特定的 或者 CSS 表达式来“选择” HTML文件中的某个部分。

XPath 是一门用来在XML文件中选择节点的语言,也可以用在HTML上。 CSS 是一门将HTML文档样式化的语言。

XPath最最直观的介绍:

例如:知乎问题页面上的标题的XPath如下:

图中红框里就是标题的XPath.(这只是一个直观的介绍,还有一些细节可以在代码中看到)

爬取代码:

爬取问题的相关信息只需要问题url即可,我这里把收集的问题url写到文件中,爬虫程序去遍历文件,然后依次爬取.

我是在登录成功知乎后的这个方法里面构造的起始url,所以读文件的方法也在这里,代码如下:

其中最重要的一行是:

yield scrapy.Request 代表开始爬取一条url,如果有多个url就yield多次. 这里的次数等同于中非#开头的url

如下:

是请求url地址后,返回的response的回调处理函数,也是整个爬取过程中最核心的代码.

如下:

其中主要代码是用选取我们需要的问题信息(注意:这里的路径并不一定与 chrome的debug模式中复制的xpath一致,直接复制的xpath一般不太能用,自己看html代码结构写的),

获取到问题的信息之后放到中定义好的对象中,然后 , 会把对象传递到配置的pipelines中.

pipelines一般是在配置文件中配置,

因为这里爬取问题只保存到mysql数据库,并不下载图片,(而爬取答案需要下载图片)所以各自在在爬虫程序中定义的,如下:

以上是爬取知乎问题的整个大致过程.

后文介绍爬取收藏夹下的回答 和 问题下的回答(包括内容和图片).

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180913A0KMQQ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券