Python爬取简书主页信息
主要学习如何通过抓包工具分析简书的Ajax加载,有时间再写一个Multithread proxy spider提升效率。
1. 关键点:
使用单线程爬取,未登录,爬取简书主页Ajax加载的内容。主要有三个关键点:
- 抓包抓到的
X-INFINITESCROLL: true、X-Requested-With: XMLHttpRequest、两个字段是固定的。 - 还有
X-CSRF-Token这个key的value通过首次请求简书首页获得,用于爬取Ajax的下一页。 - 表单里的
seen_snote_ids[]: xxxxx是文章的ID,如果下次请求不带上这个ID,会出现重复的数据
2. 效果图:

3. 源代码:
# /usr/bin/env python3
# _*_ coding:utf-8 _*_
"""
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Name : Liu
Date : 2019/4/1 18:14
Version : Python 3.7.0
IDE : Pycharm-community-2018.2.4
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
"""
import requests
import re
import time
class JianshuSpider(object):
def __init__(self):
self.url = 'https://www.jianshu.com' # 主页URL
self.page = 5 # 爬取的页数
self.headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36"}
def get_home_content(self):
# 请求
home_code = requests.get(self.url,headers=self.headers)
home_data = home_code.text
# 获取请求头部所需的 token
token = re.findall('<meta name="csrf-token" content="(.*?)" />',home_data)[0]
# 获取第一页所有文章的ID
id = re.findall('data-note-id="(\d*)"',home_data,re.S)
# 使用正则处理请求,获取文章的标题、链接、简介
home_page_article = self.parsing_codes(home_data)
# 打印
self.echo_content(home_page_article)
# 传入所需的token、id、爬取页数后,开始加载Ajax(爬取下一页)
self.get_next_content(token,id,self.page)
def get_next_content(self,token,id,pages):
# 使用for循环
for page in range(2,pages+1):
# 准备请求头部
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36",
"X-INFINITESCROLL": "true",
"X-Requested-With": "XMLHttpRequest",
"X-CSRF-Token": token
}
# 需要提交的表单
params = {
"page": page, # 页数
"seen_snote_ids[]": id # 帖子的ID
}
url = 'https://www.jianshu.com' # 请求的URL
# 发送请求
resp = requests.get(url,headers=headers,params=params)
# 使用正则处理请求,获取文章的标题、链接、简介
article = self.parsing_codes(resp.text)
# 打印内容
self.echo_content(article)
# 打印方法...
def echo_content(self,article):
for i in article: # 你可以不用这个方法,而是将其改为写入到文件的...
title = i[1] # 标题,
link = i[0] # 链接
desc = i[2] # 描述
print('[标题]:%s' % title)
print('[链接]:%s' % self.url + link)
print('[简介]:%s' % desc.lstrip())
time.sleep(0.1)
# 正则处理方法...
def parsing_codes(self,data):
article = re.findall('<a class="wrap-img" href="(.*?)" target="_blank">.*?<a class="title" target="_blank" href=".*?">(.*?)</a>.*?<p class="abstract">(.*?)</p>',data, re.S)
return article
# ...?
if __name__ == '__main__':
jianshu = JianshuSpider()
jianshu.get_home_content()
Python爬取简书主页信息的更多相关文章
- python 爬取简书评论
import json import requests from lxml import etree from time import sleep url = "https://www.ji ...
- python3 爬取简书30日热门,同时存储到txt与mongodb中
初学python,记录学习过程. 新上榜,七日热门等同理. 此次主要为了学习python中对mongodb的操作,顺便巩固requests与BeautifulSoup. 点击,得到URL https: ...
- Node爬取简书首页文章
Node爬取简书首页文章 博主刚学node,打算写个爬虫练练手,这次的爬虫目标是简书的首页文章 流程分析 使用superagent发送http请求到服务端,获取HTML文本 用cheerio解析获得的 ...
- Scrapy+selenium爬取简书全站
Scrapy+selenium爬取简书全站 环境 Ubuntu 18.04 Python 3.8 Scrapy 2.1 爬取内容 文字标题 作者 作者头像 发布日期 内容 文章连接 文章ID 思路 分 ...
- python2.7 爬取简书30日热门专题文章之简单分析_20170207
昨天在简书上写了用Scrapy抓取简书30日热门文章,对scrapy是刚接触,跨页面抓取以及在pipelines里调用settings,连接mysql等还不是很熟悉,今天依旧以单独的py文件区去抓取数 ...
- 用Python爬取智联招聘信息做职业规划
上学期在实验室发表时写了一个爬取智联招牌信息的爬虫. 操作流程大致分为:信息爬取——数据结构化——存入数据库——所需技能等分词统计——数据可视化 1.数据爬取 job = "通信工程师&qu ...
- python爬取 “得到” App 电子书信息
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 静觅 崔庆才 PS:如有需要Python学习资料的小伙伴可以加点击下 ...
- Python爬取房天下二手房信息
一.相关知识 BeautifulSoup4使用 python将信息写入csv import csv with open("11.csv","w") as csv ...
- python爬取北京政府信件信息01
python爬取,找到目标地址,开始研究网页代码格式,于是就开始根据之前学的知识进行爬取,出师不利啊,一开始爬取就出现了个问题,这是之前是没有遇到过的,明明地址没问题,就是显示网页不存在,于是就在百度 ...
随机推荐
- Redis模块开发示例
实现一个Redis module,支持两个扩展命令: 1) 可同时对hash的多个field进行incr操作: 2) incrby同时设置一个key的过期时间 在没有module之前,需要借助eval ...
- 2.3.5使用原子类进行i++操作
除了在i++操作时使用synchronized关键字实现同步外,还可以使用AtomicInteger原子类进行实现 原子操作时不可分割的整体,没有其他线程能够中断或检查正在原子操作的变量,一个原子类型 ...
- day3用户交互,格式化输出,数据类型,流程控制
上节课复习: 1.运行python程序的三步骤:python test.py 1.先启动python解释器 2.将test.py的内容当作普通的字符读入内存 3.python解释器解释执行刚刚读入内存 ...
- virtualbox centos 连接网络
一.设置网络 设置 -> 网络 -> 连接方式:桥接网卡.设置当前连网络的界面名称.接入网线打勾 二.开启eth0 vi /etc/sysconfig/network-scripts/if ...
- Java数据类型、操作符、表达式
基本与C#相同,因C#从Java学的 如操作符 对象的Equals方法,比较两个对象的内容是否相等. ==是比较是否引用同一对象.
- Forward团队-爬虫豆瓣top250项目-团队编程项目开发环境搭建过程
本次结对编程和团队项目我都需要用python环境,所以环境的搭建是一样的.(本文部分内容引用自己博客:http://www.cnblogs.com/xingyunqi/p/7527411.html) ...
- spark checkpoint详解
checkpoint在spark中主要有两块应用:一块是在spark core中对RDD做checkpoint,可以切断做checkpoint RDD的依赖关系,将RDD数据保存到可靠存储(如HDFS ...
- 主题模型之潜在语义分析(Latent Semantic Analysis)
主题模型(Topic Models)是一套试图在大量文档中发现潜在主题结构的机器学习模型,主题模型通过分析文本中的词来发现文档中的主题.主题之间的联系方式和主题的发展.通过主题模型可以使我们组织和总结 ...
- hdu 5047 大数找规律
http://acm.hdu.edu.cn/showproblem.php?pid=5047 找规律 信kuangbin,能AC #include <stdio.h> #include & ...
- 背水一战 Windows 10 (42) - 控件(导航类): Frame 动画
[源码下载] 背水一战 Windows 10 (42) - 控件(导航类): Frame 动画 作者:webabcd 介绍背水一战 Windows 10 之 控件(导航类) Frame 动画 示例An ...