主要学习如何通过抓包工具分析简书的Ajax加载,有时间再写一个Multithread proxy spider提升效率。

1. 关键点:

使用单线程爬取,未登录,爬取简书主页Ajax加载的内容。主要有三个关键点:

  • 抓包抓到的X-INFINITESCROLL: trueX-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爬取简书主页信息的更多相关文章

  1. python 爬取简书评论

    import json import requests from lxml import etree from time import sleep url = "https://www.ji ...

  2. python3 爬取简书30日热门,同时存储到txt与mongodb中

    初学python,记录学习过程. 新上榜,七日热门等同理. 此次主要为了学习python中对mongodb的操作,顺便巩固requests与BeautifulSoup. 点击,得到URL https: ...

  3. Node爬取简书首页文章

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

  4. Scrapy+selenium爬取简书全站

    Scrapy+selenium爬取简书全站 环境 Ubuntu 18.04 Python 3.8 Scrapy 2.1 爬取内容 文字标题 作者 作者头像 发布日期 内容 文章连接 文章ID 思路 分 ...

  5. python2.7 爬取简书30日热门专题文章之简单分析_20170207

    昨天在简书上写了用Scrapy抓取简书30日热门文章,对scrapy是刚接触,跨页面抓取以及在pipelines里调用settings,连接mysql等还不是很熟悉,今天依旧以单独的py文件区去抓取数 ...

  6. 用Python爬取智联招聘信息做职业规划

    上学期在实验室发表时写了一个爬取智联招牌信息的爬虫. 操作流程大致分为:信息爬取——数据结构化——存入数据库——所需技能等分词统计——数据可视化 1.数据爬取 job = "通信工程师&qu ...

  7. python爬取 “得到” App 电子书信息

    前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: 静觅 崔庆才 PS:如有需要Python学习资料的小伙伴可以加点击下 ...

  8. Python爬取房天下二手房信息

    一.相关知识 BeautifulSoup4使用 python将信息写入csv import csv with open("11.csv","w") as csv ...

  9. python爬取北京政府信件信息01

    python爬取,找到目标地址,开始研究网页代码格式,于是就开始根据之前学的知识进行爬取,出师不利啊,一开始爬取就出现了个问题,这是之前是没有遇到过的,明明地址没问题,就是显示网页不存在,于是就在百度 ...

随机推荐

  1. VC6.0编译器设置

    主要通过VC的菜单项Project->Settings->C/C++页来完成.我们可以看到这一页的最下面Project Options中的内容,一般如下:/nologo /MDd /W3 ...

  2. JS库汇总[重要]

    库名称  说明 附加说明 URI 一款js 操作URL的插件 功能十分强大.可以增加 .修改.删除.参数   1.Animate.css 2.Hover.css 3.jQuery 4.WebUploa ...

  3. Design Principle

    原文地址:面向对象设计模式原则详解 http://blog.csdn.net/hguisu/article/details/7571617 程序员必备的七大面向对象设计原则(一) http://www ...

  4. 各种学习Demo链接

    CSS3: 钟表:http://demo.qpdiy.com/hxw/CSS3/css3_clock.html CSS3各种旋转:http://demo.qpdiy.com/hxw/CSS3/css3 ...

  5. POJ3255-Roadblocks(最短路)

    Description Bessie has moved to a small farm and sometimes enjoys returning to visit one of her best ...

  6. 网络timeout区分

    ConnectTimeout 连接建立时间,三次握手完成时间 SocketTimeout 数据传输过程中数据包之间间隔的最大时间 下面重点说下SocketTimeout,比如有如下图所示的http请求 ...

  7. 用户访问网页流程、DNS 解析流程

    一.用户访问流程 二.DNS解析流程 DNS( Domain Name System)是“域名系统”的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于 TCP/IP 网络,它所提供的 ...

  8. 用指定的用户名和密码无法登录到该ftp服务器

    今天在win2008 R2 服务器上默认部署FTP站点时遇到了两个小问题,在网上找了好久资料后发现还是解决不了问题,最终找到问题的原因,在此共享给大家 1.Windows无法访问此文件夹.请确保输入的 ...

  9. .NetCore 发布到 Centos docker

    [搭建环境] 系统:CentOS 7.0    容器:Docker 1.13.1    .Net Core 版本:.NET Core 2.2     工具:putty.filezilla 等. 一.安 ...

  10. [leetcode.com]算法题目 - Pascal's Triangle

    Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5,Retur ...