前言:

使用多进程爬虫方法爬取简书网热评文章,并将爬取的数据存储于MongoDB数据库中

本文为整理代码,梳理思路,验证代码有效性——2020.1.17


环境:
Python3(Anaconda3)
PyCharm
Chrome浏览器

主要模块: 后跟括号内的为在cmd窗口安装的指令
requests(pip install requests)
lxml(pip install lxml)
re
pymongo(pip install pymongo )
multiprocessing
proxiesIp(自定义的IP代理池库,可以不要)

1

爬取简述网热门文章信息(用户ID、标题、文章内容、评论数、点赞数、打赏数)

2

2.1.通过观察可以发现该网页没有具体的分页,一直滑动页面可以一直浏览,由此可以判断该页面为异步加载(即不刷新整个网页,只进行局部的更新加载)。

2.2.打开开发者工具 F12 按Network选项,并滚动页面,我们发现请求返回了一些数据,而这些数据里正有我们需要访问的真实URL,由此我可以构造相应的url列表解析式。

3

我们需要以下文章信息:用户ID、标题、文章内容、评论数、点赞数、打赏数,使用XPath我们对该网页进行解析。

# 用户ID
author = info.xpath('div/div/a[1]/text()')[0]
# 文章标题
title = info.xpath('div/a/text()')[0]
# 文章内容
content = info.xpath('div/p/text()')[0].strip()
# 评论数
comment = info.xpath('div/div/a[2]/text()')[1].strip()
# 点赞数
like = info.xpath('div/div/span[2]/text()')[0].strip()
# 打赏数
rewards = info.xpath('div/div/span[3]/text()')
if len(rewards) == 0:reward = '无'
else:reward = rewards[0].strip()

因为并非所有文章都有打赏,所以,我们对其进行判断

4

使用多进程,首先导入使用多进程所需的库

from multiprocessing import Pool

其次,创建进程池,这里的processes是指同步发生的进程数量

测试发现,在爬取简书网热评文章时,processes越大,返回的HTTP状态为429(请求次数过多)的情况越多,这里为2时最佳。

pool = Pool(processes=2)

最后,调用进程爬虫

调用进程爬虫,这里使用的是一个map函数,第一个参数是一个函数,第二个参数是一个列表,这里的意思是将列表中的每个元素作用到前面这个函数中。

pool.map(get_jianshu_info, urls)

5

将数据插入到MongoDB数据库中
5.1.首先,导入必要的pymongo库

import pymongo

5.2.其次,连接并创建数据库即数据集合

# 连接数据库
client = pymongo.MongoClient('localhost', 27017)# 创建数据库和数据集合
mydb = client['mydb']
jianshu_shouye = mydb['jianshu_shouye']

5.3.最后插入数据到数据库’jianshu_shouye‘中

data = { 'author':author,'title':title,'content':content,'comment':comment,'like':like,'reward':reward}
# 插入数据库
jianshu_shouye.insert_one(data)

完整代码

说明:该代码仅为了学习一下爬虫技术,在url构造时只爬取两页,可自行修改。另,代理IP池(from proxiesIP_1_1 import proxiesIp)可以不要,测试时为了防止被封IP加入的。还有有什么问题可以在评论里说明一下。

# 导入库
import requests
from lxml import etree
import pymongo
from multiprocessing import Poolfrom proxiesIP_1_1 import proxiesIp# 连接数据库
client = pymongo.MongoClient('localhost', 27017)# 创建数据库和数据集合
mydb = client['mydb']
jianshu_shouye = mydb['jianshu_shouye']headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) ''AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36'}# 定义获取信息的函数
def get_jianshu_info(url):ip = proxiesIp.selectIp()html = requests.get(url=url, headers=headers, proxies=ip)print(url, html.status_code)selector = etree.HTML(html.text)# 获取大标签,以此循环infos = selector.xpath('//ul[@class="note-list"]/li')for info in infos:try:# 用户IDauthor = info.xpath('div/div/a[1]/text()')[0]# 文章标题title = info.xpath('div/a/text()')[0]# 文章内容content = info.xpath('div/p/text()')[0].strip()# 评论数comment = info.xpath('div/div/a[2]/text()')[1].strip()# 点赞数like = info.xpath('div/div/span[2]/text()')[0].strip()# 打赏数rewards = info.xpath('div/div/span[3]/text()')if len(rewards) == 0:reward = '无'else:reward = rewards[0].strip()data = { 'author':author,'title':title,'content':content,'comment':comment,'like':like,'reward':reward}print(data)# 插入数据库jianshu_shouye.insert_one(data)except IndexError:# pass掉IndexError错误pass# 程序主入口
if __name__ == '__main__':urls = ['https://www.jianshu.com/c/bDHhpK?order_by=top&page={}'.format(str(i)) for i in range(1, 3)]# 创建进程池pool = Pool(processes=2)# 调用进程爬虫pool.map(get_jianshu_info, urls)

爬虫练习-爬取简书网热评文章相关推荐

  1. 简书python_使用 Python 爬取简书网的所有文章

    01 抓取目标 我们要爬取的目标是「 简书网 」. 打开简书网的首页,随手点击一篇文章进入到详情页面. 我们要爬取的数据有:作者.头像.发布时间.文章 ID 以及文章内容. 02 准备工作 在编写爬虫 ...

  2. python爬虫之爬取简书中的小文章标题

    学习了三个星期的python基础语法,对python语法有了一个基本的了解,然后想继续深入学习,但不喜欢每天啃书本,太无聊了,只有实战才是练兵的最好效果.听说爬虫技术还是比较好玩的,就搞爬虫,但找了好 ...

  3. 【爬虫】爬取简书某ID所有文章并保存为pdf

    编辑 / 昱良 1 目 标 场 景 现如今,我们处于一个信息碎片化的信息时代,遇到好的文章都有随手收藏的习惯.但过一段时间,当你想要重新查看这篇文章的时候,发现文章已经被移除或莫名其妙地消失了. 如果 ...

  4. python 简书_python爬取简书网文章的方法

    python爬取简书网文章的方法 发布时间:2020-06-30 14:37:08 来源:亿速云 阅读:100 作者:清晨 这篇文章主要介绍python爬取简书网文章的方法,文中示例代码介绍的非常详细 ...

  5. 基于python爬虫的论文标题_Python3实现爬取简书首页文章标题和文章链接的方法【测试可用】...

    本文实例讲述了Python3实现爬取简书首页文章标题和文章链接的方法.分享给大家供大家参考,具体如下: from urllib import request from bs4 import Beaut ...

  6. Node爬取简书首页文章

    Node爬取简书首页文章 博主刚学node,打算写个爬虫练练手,这次的爬虫目标是简书的首页文章 流程分析 使用superagent发送http请求到服务端,获取HTML文本 用cheerio解析获得的 ...

  7. selenium+python爬取简书文章

    页面加载逻辑 当你兴致勃勃地从网上学习了基本的爬虫知识后就像找个目标实践下,拥有大量文章的简书包含了大量的有价值信息,所以自然成为了你的选择目标,如果你尝试之后会发现并没有想象的那么简单,因为里面包含 ...

  8. 简书推荐作者风云榜(爬取简书app数据)

    一.前言 自处女作<爬取张佳玮138w+知乎关注者:数据可视化>一文分布后,来简书快一个月了(20170831).但一直不怎么熟悉这个平台,因此,这回爬取简书app里的推荐作者并进行简单可 ...

  9. scrapy实战之爬取简书

    这一节,我们利用scrapy来爬取简书整站的内容.对于一篇文章详情页面,我们发现许多内容是Ajax异步加载的,所以使用传统方式返回的response里并没有我们想要的数据,例如评论数,喜欢数等等.对于 ...

最新文章

  1. Spring Boot 对CORS跨域访问的配置
  2. spring boot 单元测试_spring-boot-plus1.2.0-RELEASE发布-快速打包-极速部署-在线演示
  3. 三维空间两直线/线段最短距离、线段计算算法 【转】
  4. Java 异步回调机制实例解析
  5. php代码的健壮性,代码健壮性的几点思考 - 逍遥客 - 51Testing软件测试网 51Testing软件测试网-软件测试人的精神家园...
  6. LINQ体验(2)——C# 3.0新语言特性和改进(上篇)
  7. 设计模式学习笔记三:工厂方法模式
  8. 复杂网络社区划分方法综述
  9. 简单方法去除视频水印
  10. ARM架构与系列简介
  11. 东方元鼎付淼:移动互联网创业门槛已降低
  12. Android 关于网络图片加载不出来的问题
  13. mac蓝牙鼠标总是自己断开_解决Mac蓝牙鼠标和键盘经常断开的问题
  14. 我们已经开发好了Magento的Ctopay(收汇宝)非3D网关
  15. 编程实现:任意输入英文的月份,在查找月份表后输出其对应的中文提示。缩写也可查找。
  16. android 获取sn序列号
  17. 打印skb内容的一小段代码
  18. (Note)答辩经验
  19. 第6章 放大器的频率特性
  20. HTML标签播放MP4视频

热门文章

  1. java web开发(web 语言开发pk)
  2. 【我的Android进阶之旅】如何快速寻找Android第三方开源库在Jcenter上的最新版本
  3. 梦幻服务器系统维护后多久再登录,梦幻西游:系统维护后出现重大漏洞,官方发文紧急停机修复?...
  4. 传统娱乐能否搭上互联网快车?
  5. 【紫书】UVA673 平衡的括号 Parentheses Balance
  6. Java EE与jakarta
  7. 数据结构--全国交通咨询系统(C语言)
  8. 2022年全球与中国医疗保健用肌肽行业市场深度调研及投资预测报告
  9. 众昂矿业:萤石在化工行业领域用途解析
  10. 价值万元,分享给大家