python3 scrapy爬取微信公众号及历史信息V1.0

作者: 简书用户9527 | 来源:发表于2018-02-26 22:33 被阅读614次
妹子图.png

环境:

python3 scrapy

目的

写这篇文章主要是做一下纪念,毕竟是搞了快两天的东西了,今天加大了量,使用scrapy爬取100多个微信公众号,然后出现IP被封的情况下,当然了,这种情况并不是没有办法解决,只需要在scrapy中进行设置一下就可以了,主要是在本地进行调试,然后IP代理池那一块暂时找不到好的质量高的IP,只是爬取了各大网站的免费IP,并没有很好的解决效果,这个版本只要在IP中稍微进行下设置调整,可以不愧为一个很好的爬取微信公众号历史消息的一个小案例。

爬取步骤

  1. 找到公众号


    image.png
  2. 获取历史消息


    image.png
  3. 获取详情页内容


    image.png

还有第4步:

将详情页内容解析出来,图片,文字都单独拎出来,现在暂时不做处理,因为这一块有些麻烦的。逻辑整体就是这样。

python代码

这里是spider的代码,其他的就不用贴出来了:

spiders/WeChatSogou.py

# -*- coding: utf-8 -*-
# @Time    : 2018/2/25 14:24
# @Author  : 蛇崽
# @Email   : 643435675@QQ.com
# @File    : WeChatSogou.py(微信公众号爬虫:不包含浏览量跟评论)
import scrapy
import re
import time
import json
import requests
from fake_useragent import UserAgent
from scrapy import Request
from scrapy_redis.spiders import RedisSpider
from News_scrapy.items import NewsItem
from News_scrapy.constants.WeChatSource import WXSource

class WeChatSogouSpider(scrapy.Spider):
    name = "WeChat"
    allowed_domains = ["weixin.sogou.com",'mp.weixin.qq.com']
    start_urls = ['http://weixin.sogou.com/']

    def parse(self, response):

        wx_source = WXSource.get_dict()
        for v_wx_source in wx_source:
            print('wx_source ===',v_wx_source)
            try:
                type = v_wx_source.split('-')[0]
                channel = v_wx_source.split('-')[1]
                print("正在抓取:", type, channel)
                v_main_url = 'http://weixin.sogou.com/weixin?type=1&s_from=input&query={}'.format(channel)
                print('v_main_url',v_main_url)
                yield scrapy.Request(url=str(v_main_url),callback=self.parse_main_link,meta={'type':type})
            except:
                continue
                print('wx_source error ===', v_wx_source)


    def parse_main_link(self,response):
        print('parse_main_link ====  ',response.body)
        target_url = response.xpath("//*['txt-box']/p[@class='tit']/a/@href").extract_first()
        print('===== start =====')
        print('target_url',target_url)
        print('==== end =====')
        if target_url:
            yield scrapy.Request(url=target_url,callback=self.parse_list_gzhao)


    def parse_list_gzhao(self,response):
        print('resonse:  ',response)
        req_text = response.text

        reg_content_url = r'"content_url":"(.*?)",'
        m_infos = re.findall(reg_content_url, req_text, re.S)
        print(len(m_infos))
        for v_info in m_infos:
            v_info = 'https://mp.weixin.qq.com' + re.sub('&', '&', v_info)
            print(v_info)
            yield scrapy.Request(url=v_info,callback=self.parse_detail)

    def parse_detail(self, response):
        print('parse_detail ===== ',response.text)


注意事项:
1 allowed_domains = ["weixin.sogou.com",'mp.weixin.qq.com'] 

2  reg_content_url = r'"content_url":"(.*?)",'
 这里通过正则方式获取每个详情页链接的url,因为原文用的js动态加载的,

下面这是注意事项2的截图:

image.png

很蛋疼吧,哈哈,哎。

放上自己小小的学习交流群吧
Python自学交流群(702689263)

相关文章

  • python3 scrapy爬取微信公众号及历史信息V1.0

    环境: python3 scrapy 目的 写这篇文章主要是做一下纪念,毕竟是搞了快两天的东西了,今天加大了量,...

  • 微信公众号批量爬取Java版

    最近需要爬取微信公众号的文章信息。在网上找了找发现微信公众号爬取的难点在于公众号文章链接在pc端是打不开的,要用微...

  • 2019-02-21

    爬取微信公众号文章的经验总结 爬取微信公众号的文章不少,但是现在爬取微信公众号越来越难了,微信对于这方面管控是越来...

  • 0.Python 爬虫之Scrapy入门实践指南(Scrapy基

    [TOC] 0.0、Scrapy基础 Python2:适合爬取非中文 Python3:适合爬取中文 Scrapy是...

  • scrapy+selenium爬取微信公众号

    爬虫介绍: 用于微信公众号以及文章的爬取,爬取速度较低网速测试平均为200条文章每分钟,基本100页的文章页面4m...

  • 微信公众号及服务号文章爬取

    使用Python爬取公众号文章主要两种方法: 通过爬取第三方公众号聚合网站 通过微信公众平台引用文章接口 通过爬取...

  • 扒一扒立信微生活的表白墙

    一、介绍 一直想爬微信公众号的历史信息,无奈限于腾讯爸爸的微信反爬机制——PC端历史消息只能看到10条,除了通过中...

  • 微信公众号爬取

    https://mp.weixin.qq.com/s?__biz=MzI5NDY1MjQzNA==&mid=224...

  • 微信公众号文章爬虫

    很多的微信公众号都提供了质量比较高的文章阅读,对于自己喜欢的微信公众号,所以想做个微信公众号爬虫,爬取相关公众号的...

  • Python 简单关键字爬取公众号文章

    序 原文地址:Python 简单关键字爬取公众号文章爬取目标:微信公众号“纵梦广科”中“表白墙”(可选“吐槽墙”)...

网友评论

    本文标题:python3 scrapy爬取微信公众号及历史信息V1.0

    本文链接:https://www.haomeiwen.com/subject/xekhtftx.html