利用Scrapy爬取知乎用户详细信息并存至MongoDB(学习笔记)(1)

来源:互联网 发布:mac保存gif图 编辑:程序博客网 时间:2024/06/07 12:57
相关:静觅 » 利用Scrapy爬取知乎用户详细信息并存至MongoDB

一、准备工作

1> 框架安装

  • Scrapy爬虫框架

pip install scrapy

  • PyMongo:pythonMongoDB连接库

pip install pymongo

  • MongoDB
2> 创建

  • 创建项目
在目标路径下启动管理员命令提示符
scrapy startproject zhihuuser
  • 创建爬虫
cd zhihuuser ##因为需要在项目里创建
scrapy genspider zhihu www.zhihu.com
  • 禁止ROBOTSTXT_OBEY

settings.py

ROBOTSTXT_OBEY =  False

注:

robots.txt是遵循Robot协议的一个文件,保存在网站的服务器中。

作用:阻止搜索引擎爬虫爬取网站目录下不希望爬取的网页内容。

Scrapy在启动后会在首先访问网站的robots.txt文件,决定该网站的爬取范围。

当想要获取robots.txt所禁止访问的的内容时。可以把此配置项设置为False,选择不遵守Robot协议。


二、爬取测试


  1. 运行:
    scrapy crawl zhihu
    如果运行结果出现:
    500 Internet Server Error
    说明没有爬取成功,需要添加headers信息,加入User-Agent伪装成浏览器
  2. headers可以在settings.py里修改,或在Request或spdier->custom_settings添加
    settings.py
    取消DEFAULT_REQUEST_HEADERS的注释#添加DEFAULT_REQUEST_HEADERS = {    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36'}
  3. 重新运行测试

三、爬取流程

查看待爬取的网页源代码

answers开头的Ajax请求。

图片一
图片二
可知:这是一个GET类型的请求。
Request URL中有三个参数
  1. include:查询参数,获取关注的人的基本信息,包括回答数、文章数量等。
  2. offset:偏移量,如图这是第四页的列表内容,当前offset为45.
  3. limit:可以理解为每一页的关注/回答的内容数量,当前为15
综上,当offset为0时,当前页面为第一页,当offset为15,以此类推...


Preview标签下:

图三
可知datapaging两个字段。
data:包含15个内容,包括用户的基本信息。
paging:
is_end:判断当前页面翻页是否结束。
next/previous:下/上一页的链接。
在进行翻页操作时,先通过is_end判断,再是否跳转到目标的URL。


当源代码光标指向其中一个关注用户时:
图四
出现一个新的请求,点击查看:
Rquest  URL:

https://www.zhihu.com/api/v4/members/rebornix

与上面的区别就是后面多了一个用户名。

图五
用户名 = url_token

====================================================================================================================================

总结:

  • 要获取用户的关注列表,需要请求类似 https://www.zhihu.com/api/v4/members/{user}/followees?include={include}&offset={offset}&limit={limit} 这样的接口,其中user就是该用户的url_token,include是固定的查询参数,offset是分页偏移量,limit是一页取多少个。
  • 要获取用户的详细信息,需要请求类似 https://www.zhihu.com/api/v4/members/{user}?include={include} 这样的接口,其中user就是该用户的url_tokeninclude是查询参数。



0 0