精华内容
下载资源
问答
  • GitHub 微信公众号爬虫推荐 本文推荐 GitHub 微信公众号爬虫article_spider 。 微信公众号爬虫有别于一般的网页爬虫,由于是一个相对封闭的内容平台,入口比较少,所以难度就有点大了。大概查找了一下,发觉基本上不...
  • 基于 Python 实现微信公众号爬虫 『课程目录』: 0微信公众号爬虫的基本原理 1使用 Requests 实现一个简单网页爬虫 2使用 Fiddler 抓包分析公众号请求过程 3抓取微信公众号第一篇文章 4...
  • 高效微信爬虫,微信公众号爬虫,公众号历史文章,文章评论,文章阅读及在看数据更新,可视化网页,可部署于Windows服务器。 使用环境 基于Python3 ==> flask/mysql/redis/mitmproxy/pywin32等实现 查看及安装依赖...
  • 爬取公众号所有文章数据 支持自动识别验证码 离线数据库,包含文章原始信息,文章图片 微信文章预览
  • 基于搜狗微信搜索的微信公众号爬虫接口demo
  • 开源代码仅限技术分享交流,请充分尊重公众号作者的知识产权以及劳动成果,同时作为有素质的爬虫开发人员请控制好抓取的频率,本人概不承担任何基于本代码实现的工程引起的责任或纠纷. 此项目是微信公众号批量自动化...
  • 微信公众号爬虫

    2019-01-30 18:14:32
    用python爬取微信公众号内容 主要内容: 爬虫基本原理 爬虫工具 Requests 的基本使用 数据抓包分析工具 Fiddler 的基本使用 MongoDB 数据库的基本使用 使用 Pandas 进行数据分析 使用 Matplotlib 进行数据可视化展示
  • 由于微信公众号爬虫的特殊性,微信公众号爬虫始终是爬虫工程师比较头疼的一个问题。 本文主要介绍一下目前市面上各种爬虫的优劣性以及适用群体 如果您有任何不同见解,或者除文中四种方式之外的方式.欢迎留言跟我...

    文中四种方式,均为我本人亲身使用过, 文中所有的文字及图片均为本人身亲自编写和截图, 如果转载,请标明来源

    由于微信公众号爬虫的特殊性,微信公众号爬虫始终是爬虫工程师比较头疼的一个问题。

    本文主要介绍一下目前市面上各种爬虫的优劣性以及适用群体

    如果您有任何不同见解,或者除文中四种方式之外的方式.欢迎留言跟我交流.

     

    1.搜狗微信(https://weixin.sogou.com/)

    优点: 易于抓取,唯一的限制只有验证码(可以通过更换代理ip避免)

    缺点: 无法通过公众号搜索,获取指定公众号文章, 无法获取永久链接 (文章只有几个小时有效期,过后无法打开),无法获取阅读数

    难点:  验证码(通过代理ip可以解决)

    适用群体: 个人抓取文章后保存,后可用于做数据分析

    原理简介: 通过程序请求搜狗的首页, 分析html结构, 通过正则匹配 拿到文章的url 即可. 如下图所示

    搜狗微信

    2. 基于中间人以及脚本的方式

    优点: 可以低成本获取数据,并且可以获取阅读数

    缺点: 抓取数据有限(微信限制,无法解决),难于部署(需要脚本+抓包工具转发),可能会封号!!!

    适用群体: 个人抓取规模很小的情况下,或者企业用于小规模抓取(100个公众号左右)

    原理简介:

    通过点击的方式 正常向微信发送请求,但是在配置了抓包工具等方式的中间人代理,可以捕获到点击的链接,从而抓取返回的数据发送到服务端

    脚本可以通过按键精灵或者其他语言的自动化程序来实现

    流程演示如下( 演示 使用的是mac版客户端,  win/mac/ios/android 客户端同理 ) 

    a.配置好抓包工具(charles/fiddler) 或中间人代理

    b.在客户端随意点击一篇文章

    配置好抓包工具后点击文章

    c.查看抓包工具的请求

     

    抓到的json数据

    d.配置转发

     

     charles配置转发的方式

    不过这个方式只能转发参数, 转发参数后,可以在服务端模拟请求即可. 后面我会完善一篇anyproxy实现结果的转发.

    不过请注意!!!! 这种方式应该很可能会封号, 因为在点击文章的同时 相当于阅读了某一篇文章. 所以建议拉长抓取间隔,降低每天抓取次数(100~200次之内可能比较合理).

     

    3.公众号后台抓取

    优点: 可以请求多次,并且不依赖与微信号不会有封号的风险

    缺点: 无法抓取阅读数, 需要申请微信公众号, 需要人为操作(授权扫码), 稳定性可能相对差一些(异常导致操作失效)

    难点: 自动化操作流程

    适用群体: 只想抓文章,不需要阅读数,并且对稳定性不太在意的

    原理简介:

    a.首先打开微信公众平台官网 https://mp.weixin.qq.com/ ,并且扫码登录

    b. 左侧菜单栏选择创作管理->图文素材->新的创作->图文消息

     

    c. 点击超链接 选择公众号, 手动输入需要抓取的公众号 

    d.此时可以打开浏览器检查元素 查看一下请求(提前打开检察元素 不然无法拦截到请求)

    可以看到两个 XHR的资源 searchbiz是查询公众号 appmsg是获取公众号文章 

    https://mp.weixin.qq.com/cgi-bin/searchbiz

    https://mp.weixin.qq.com/cgi-bin/appmsg

    具体参数请自行抓包查看 很简单的几个参数

    e.到此为止 整套流程就完事了, 需要做的就是 通过自动化的程序 来实现如下操作, 如果追求一体化的操作并且熟悉python的朋友 可以尝试用selenium来操作,这个方式相对简单一些,如果不太熟悉python的朋友 可以手动登录并且扫码后 导出 cookie , 然后再用自己熟悉的语言,使用cookie并请求接口 即可实现 (核心问题就是cookie) 

     

    4.购买成熟的api方案

    优点: 不需要任何部署,直接调用api即可实现,可获取阅读数和文章,也可以通过关键词搜索

    缺点: 大部分可能需要付费.

    难点: 无

    适用群体: 需求量比较大的企业,并且需要数据稳定性较高

    原理简介:  封装好的数据接口,底层应该是由一套分布式的稳定架构来实现, 由一些小号以及代理ip来实现规模大一点的抓取

    展开全文
  • 基于Python的微信公众号爬虫 Python是一种解释性的,高级的通用编程语言。 由Guido van Rossum创建并于1991年首次发布,Python的设计理念强调代码可读性,其显着使用了重要的空白。 它的语言结构和面向对象的方法...

    基于Python的微信公众号爬虫

    Python是一种解释性的,高级的通用编程语言。 由Guido van Rossum创建并于1991年首次发布,Python的设计理念强调代码可读性,其显着使用了重要的空白。 它的语言结构和面向对象的方法旨在帮助程序员为小型和大型项目编写清晰的逻辑代码。
    网络上关于爬虫的教程多如牛毛,但很少有看到微信公众号爬虫教程,要有也是基于搜狗微信的,不过搜狗提供的数据有诸多弊端,比如文章链接是临时的,文章没有阅读量等指标,所以我想写一个比较系统的关于如何通过手机客户端利用 Python 爬微信公众号文章的教程,并对公众号文章做数据分析,为更好地运营公众号提供决策。

    爬虫的基本原理

    爬虫就是一个自动化数据采集工具,你只要告诉它要采集哪些数据,丢给它一个 URL,就能自动地抓取数据了。其背后的基本原理就是爬虫程序向目标服务器发起 HTTP 请求,然后目标服务器返回响应结果,爬虫客户端收到响应并从中提取数据,再进行数据清洗、数据存储工作。

    爬虫的基本流程

    爬虫流程也是一个 HTTP 请求的过程,以浏览器访问一个网址为例,从用户输入 URL 开始,客户端通过 DNS 解析查询到目标服务器的 IP 地址,然后与之建立 TCP 连接,连接成功后,浏览器构造一个 HTTP 请求发送给服务器,服务器收到请求之后,从数据库查到相应的数据并封装成一个 HTTP 响应,然后将响应结果返回给浏览器,浏览器对响应内容进行数据解析、提取、渲染并最终展示在你面前。
    HTTP 协议的请求和响应都必须遵循固定的格式,只有遵循统一的 HTTP 请求格式,服务器才能正确解析不同客户端发的请求,同样地,服务器遵循统一的响应格式,客户端才得以正确解析不同网站发过来的响应。
    在这里插入图片描述

    HTTP 请求格式

    HTTP 请求由请求行、请求头、空行、请求体组成。
    请求行由三部分组成:

    1. 第一部分是请求方法,常见的请求方法有 GET、POST、PUT、DELETE、HEAD
    2. 第二部分是客户端要获取的资源路径
    3. 第三部分是客户端使用的 HTTP 协议版本号
      请求头是客户端向服务器发送请求的补充说明,比如 User-Agent 向服务器说明客户端的身份。
      请求体是客户端向服务器提交的数据,比如用户登录时需要提高的账号密码信息。请求头与请求体之间用空行隔开。请求体并不是所有的请求都有的,比如一般的GET都不会带有请求体。
      下图就是浏览器登录豆瓣时向服务器发送的HTTP POST 请求,请求体中指定了用户名和密码。
      在这里插入图片描述

    HTTP 响应格式

    HTTP 响应格式与请求的格式很相似,也是由响应行、响应头、空行、响应体组成。
    响应行也包含三部分,分别是服务端的 HTTP 版本号、响应状态码、状态说明,响应状态码常见有 200、400、404、500、502、304 等等,一般以 2 开头的表示服务器正常响应了客户端请求,4 开头表示客户端的请求有问题,5 开头表示服务器出错了,没法正确处理客户端请求。状态码说明就是对该状态码的一个简短描述。
    第二部分就是响应头,响应头与请求头对应,是服务器对该响应的一些附加说明,比如响应内容的格式是什么,响应内容的长度有多少、什么时间返回给客户端的、甚至还有一些 Cookie 信息也会放在响应头里面。
    第三部分是响应体,它才是真正的响应数据,这些数据其实就是网页的 HTML 源代码。

    展开全文
  • 微信公众号爬虫(综合解决方案)

    千次阅读 2019-05-17 20:39:16
    一般公司内部会部署自己爬虫平台,通过代理池能最终解决此问题。在没有用代理池遇到验证码反爬措施时,我们自动识别并填写并维护一个cookie池,即能降低验证码出现的频率。 遇到验证码时的理想状态是自动识别,可...

    最终解决方案

    通过搜狗微信先检索公众号,获取公众号主页链接,接着爬每一篇具体文章,具体用selenium实现,当然你也可以用webkit、Geoko渲染引擎自己去渲染。用selenium、webkit、Geoko能省去分析网页Js Ajax部分加载逻辑。关于selenium的一些常用操作,后续抽个时间单独写一篇博文儿~。

    一般公司内部会部署自己爬虫平台,通过代理池能最终解决此问题,当然也可以用免费开源项目IPProxyPool利用免费爬到的IP构建代理池。在没有用代理池遇到验证码反爬措施时,我们自动识别并填写并维护一个cookie池,即能降低验证码出现的频率。

    遇到验证码时的理想状态是自动识别,可通过购买现成接口或自己用CNN训练个模型。本文用的是人肉识别手动填写…

    难点

    1. 通过公众号检索页面检索时,超过一定次数后就会出现验证码。
    2. 公众号主页的链接URL会失效。
    3. 通过搜狗微信平台检索出的结果页面HTML数据中,匹配到的公众主页URL不能直接而访问,直接访问会被反爬措施限制,需要经过js处理生成最终的请求URL才能访问(抓包的结果是最终的请求URL)。

    现有解决方案

    1. Charles移动端、PC端抓包,获取公众号主页加密链接,再后续爬取。但得到的链接可能会失效,失效后还是需要人工手动去分析抓包结果,提取URL,无法做到自动化工程级别的微信爬虫。
    2. 登录自己公众号,通过“检索功能”爬取其他公众号的文章。但检索有上限,500篇一天。
    3. 八爪鱼模板傻瓜抓取。但高级功能收费,同样无法实现工程级别的部署,玩玩还是可以的 。
    4. 自动化测试工具(如Airtest,基于图像识别和poco控件识别的一款UI自动化测试工具)网易团队刚出的,挺新奇,移动端、PC都能抓,有些许bug,可以当做code版免费八爪鱼。同样不太适用于工程级别的部署。

    遇到验证码的解决办法

    正确的解决办法是识别并破解,但这里我们可以直接通过selenium截图保存本地,人肉识别并把结果输入值CommandLine,再把cookie记录下来维护个cookie池,以后换着用。不过这并不是一个永久的解决方法,只不过苦于时间紧迫,没时间去整验证码识别相关的东西,大家有时间可以学习下CNN训练验证码识别模型。如下实现思路是,判断返回页面中是否存在验证码,若有则down到本地,识别后命令行输入。

    from splinter import Browser
    from selenium import webdriver
    def get_html(url):
        with Browser("chrome", incognito=True,
                     headless=True) as browser:
            browser.driver.set_page_load_timeout(400)
            browser.driver.set_window_size(1200, 900)
            browser.visit(url)
    
            if "验证码" in browser.html:
                now = datetime.datetime.now()
                isValidCode = False
                while isValidCode != True:
                    # screen shot
                    browser.screenshot("/home/jiangbowen/wechat_identifying_code/codeToBeDealWith%s.png" % now)
                    # manually input code
                    code = input("你gg了, please inpute code:")
                    code_imput = browser.find_by_id("seccodeInput")
                    code_imput[0].click()
                    code_imput[0].fill(code)
                    submit_btn = browser.find_by_id("submit")
                    time.sleep(3)
    
                    code_imput[0].click()
                    time.sleep(1)
                    code_imput[0].fill(code)
                    browser.screenshot("/home/jiangbowen/wechat_identifying_code/afterFillingCode%s.png" % now)
                    time.sleep(1)
                    submit_btn[0].click()
                    # be careful
                    time.sleep(7)
                    browser.screenshot("/home/jiangbowen/wechat_identifying_code/afterclick%s.png" % now)
    
                    print(browser.driver.current_url)
                    return browser.html
            return browser.html
    
    

    特别提醒:
    在模拟填入验证码并点击提交后,需要我们等待一段时间,用于留给微信后端验证,此过程较长,建议5s以上(填了很久才发现这个鬼原因)。否则通过browser.driver.current_url获取到的仍然是验证页面的URL,而不是我们想要的检索页面。

    每一步的ScreenShot如下:
    在这里插入图片描述
    可以看到验证成功!
    在这里插入图片描述

    保存Cookie的操作(建立Cookie池,略过此步亦可)

    用pickle来实现cookie的存取,注意selenium在设置Cookie时需要先加载网站
    Login成功后保存Cookie:

    import pickle
    
    # save cookie after login
    cookiess = browser.driver.get_cookies()
    # overwrite
    if not os.path.exists(LOCAL_COOKIE_PATH):
        os.mkdir(LOCAL_COOKIE_PATH)
    pickle.dump(cookiess, open(LOCAL_COOKIE_FILE, "wb"))
    

    请求前读取Cookie:

    LOCAL_COOKIE_PATH = "./cookies"
    LOCAL_COOKIE_FILE = "./cookies/cookie_qingbo.pkl"
    
    # add cookie
    try:
        # we should load website firstly
        browser.driver.get("weixin.sogou.com")
        loc_cookies = pickle.load(open(LOCAL_COOKIE_FILE, "wb"))
        browser.driver.delete_all_cookies()
    
        for cookie in loc_cookies:
            cookie_dict = {}
            cookie_dict['httpOnly'] = cookie.get('httpOnly')
    		# set other cookie items
            browser.driver.add_cookie(cookie_dict)
    
        browser.driver.refresh()
    
    except Exception as e:
        print("cookie parse error")
    
    
    

    具体解析微信文章

    根据公众号主页URL获取该页面下所有的文章Title与URL:

    def get_titleurls_by_account_homepage_url(account_home_url):
        """
        get_titles_urls_by_account_home_url
    
        :param account_home_url: public account home page's url
        :return: list of tuple (title, url)
        """
        main_page_html = get_html(account_home_url)
        account_name_reg = r"(?<=<title>)([\s\S]*?)(?=</title>)"
        url_title_reg = r"<div class=\"weui_media_bd\">([\s\S]*?)</h4>"
        url_sub_reg = r"(?<= hrefs=\")([\s\S]*?)(?=\">)"
        title_sub_reg = r"=\">([\s\S]*?)(?=</h4>)"  # need to remove top 3 char
    
        account_name = re.findall(account_name_reg, main_page_html)[0]
        url_title_arr = re.findall(url_title_reg, main_page_html)
    
        title_url_list = []
        for url_title in url_title_arr:
            article_url = "https://mp.weixin.qq.com" + re.findall(url_sub_reg ,url_title)[0].replace(";" ,"&")
            # remove <span> tag
            article_title = re.sub(r"(?=<span)[\s\S]*?</span>", '', url_title).strip()
            # remove HTML tags
            article_title = re.sub(r"<[^>]+>", '', article_title).strip()
            # remove blank
            article_title = re.sub(r"\n*  *   *    *", '', article_title).strip()
    
            title_url_list.append((article_title, article_url))
        return title_url_list
    

    根据公众号文章链接解析内容

    
    def scrape_url_content(url, title, account_name):
        """
        get wechat article detail content
    
        :param url: url
        """
        html = get_html(url)
        article = {}
    
        try:
            publish_time = re.findall(r"(?<=publish_time = \")[\s\S]*?(?=\")", html)[0]
            # Html that we care about
            tmp = re.findall('(?<=js_content">)[\s\S]*?(?=<script nonce)', html)[0]
            # remove html tag except <img>
            tmp = re.sub(r"<(?!img)[^>]*>", '', tmp)
            # tmp = re.sub(r"(<(?!/?(p|img|span)(\s|>))[^>]*>)", '', tmp) # except p/img/span
            # remove blank
            tmp = re.sub(r"\n*  *   *    *", '', tmp)
            # remove <i> tags
            tmp = re.sub(r"<i [\w].*?>", '', tmp)
            cleaned_content_html = tmp
        except Exception as e:
            return
    
        article["body"] = cleaned_content_html
        article["title"] = title
        article["source"] = account_name
        article["publish_time"] = publish_time
    
        return article
    

    最终效果:

    图片会保留原始标签,大家可自行处理。
    在这里插入图片描述

    展开全文
  • 微信公众号爬虫项目(reptile)

    千次阅读 多人点赞 2020-07-25 09:45:07
    个人在业余时间,写的一个以微信公众号爬虫为主要功能,普通网页爬虫、浏览器控制、邮件群发功能为辅的简单DEMO。功能简单,给开发者巨大的学习和发挥的空间。对spring boot和html有一些经验的人来说,上手简单,...

    代码仓库地址:https://gitee.com/taisan/reptile

    项目背景

    个人在业余时间,写的一个以微信公众号爬虫为主要功能,普通网页爬虫、浏览器控制、邮件群发功能为辅的简单DEMO。功能简单,给开发者巨大的学习和发挥的空间。对spring boot和html有一些经验的人来说,上手简单,学习成本低.

    功能介绍

    爬虫项目,微信公众号文章爬虫,网站文章爬虫,群发邮件系统

    项目架构

    springBoot 单项目架构

    已知爬取微信公众号有三种方法:

    第一种:用搜狗微信公众号搜过,这个只能收到前10条;(亲试,好多公众号连近10条都获取不到,放弃)

    第二种:用fiddler或手机抓包,从访问链接去获得appmsg_token,发现虽然这个值就在html页面里,但只有抓包的数据里含有效值,直接访问的是空的,而且还有时效性。这样,每次都要抓包获取,就很麻烦。

    第三种:就是这种用公众号搜公众号的,虽然速度慢点,但便捷了不少。(每天请求次数限制,约为100次)

    使用须知

    程序原理:

    通过selenium登录获取token和cookie,再自动爬取和下载

    使用前提:

    1、修改项目中Chrome驱动的路径改为自己本地的

    2、有自己的公众号,没有可以申请一个微信公众号(个人订阅版)(h

    展开全文
  • 基于node的微信公众号爬虫插件 #使用说明 test.js为启动文件 在cmd通过node test.js 命令启动 #介绍 非常简单的微信公众号爬虫功能。 1、通过搜狗微信搜索公众号,获取第一个公众号信息(例如python) 2、进入公众号...
  • 2020最新最稳微信公众号爬虫

    千次阅读 2020-08-21 18:22:53
    一、公众号抓取来源 1、搜狗预览器抓取:公众号搜索功能,不过现在已经关闭入口了。 2、通过个人公众号来抓取微信文章,缺点cookies易过期,且频率过高时会进行封账号处理。 3、通过监听微信app公众号插入数据库...
  • # Caesar Cipher SYMBOLS = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' MAX_KEY_SIZE = len(SYMBOLS) def getMode(): while True: print('Do you wish to encrypt or decrypt a message?...
  • 欢迎点击「算法与编程之美」↑关注我们!本文首发于微信公众号:"算法与编程之美",欢迎关注,及时了解更多此系列文章。欢迎加入团队圈子!与作者面对面!直接点击!前言对于抓取微...
  • 基于搜狗微信搜索的微信公众号爬虫 可以抓取指定公众号的文章信息到mysql数据库。对sogo和微信验证码,调用ruokuai接口进行识别。 项目使用: 一、使用说明 1、在mysql数据库中创建数据库,sql语句见gongzhonghao....
  • 基于搜狗微信搜索的微信公众号爬虫.rar
  • hello,小伙伴们,大家好,今天给大家分享的开源项目是微信公众号爬虫,感兴趣的朋友可以参考一下这个开源项目,看看是否可以给你提供一个新的思路。 项目简介 基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成...
  • 基于搜狗搜索的微信公众号爬虫,使用requests模块访问公众号url链接,爬取相关文章(不能商用,要申请公众号主体同意方可进行相关操作),并用bs4模块解析获取的文章,并取得其中的合法内容
  • 原文地址:http://blog.csdn.net/zV3e189oS5c0tSknrBCL/article/details/78967635学爬虫有什么用网络爬虫是一个非常注重实践性而且实用性很强的编程技能,它不是程序员的专属技能,任何具有一定编程基础的人都可以...
  • 服务端爬取实现见:微信公众号爬虫:服务端公众号文章数据采集 背景:在团队的学习方面需要每周收集开发方面的博客文章,汇总输出每周的技术周报。周报小组成员收集的文章大多数是来自微信公众号,公众号的内容相对...
  • 基于搜狗微信搜索的微信公众号爬虫接口 我的另外一个作品: ,基于代码生成的 Lark/飞书 Go SDK,欢迎 star 。
  • 微信公众号爬虫.rar

    2019-12-20 16:30:58
    微信公众号完成爬虫,内附整个项目的详细教程和所需相关配置软件,按照教程简单配置即可使用该项目为python的项目,新手小白也可轻松使用
  • 适合在校大学生,初学者。详细介绍了如何一步一步实现爬虫
  • 3月1号更新: 获取阅读点赞时,每篇文章间隔10s 一次性可获取500篇文章以上 从公众号获取永久链接时,间隔3分钟,可以连续获取几小时(网友测试) 公开已爬取的公众号历史文章的永久链接,数据上传至GitHub,日期均...
  • java实现微信公众号源码 AppiumWeChatAuto 1、如果要实现微信公众号文章的自动采集就必须实现微信公众号文章的自动浏览操作; 2、此工程是基于Appium和Java来实现的Android微信客户端自动化浏览的操作,基于微信...
  • 基于搜狗微信搜索的微信公众号爬虫接口
  • 为什么需要这些认证 我们通过浏览器访问多数网站,本质上都可以理解为客户端(用户)和服务端(网站)之间的一次遵循http协议的请求和应答,比如:把a页面给我(返回a.html),删除b图片(删除b.jpg... 1、session和...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,513
精华内容 10,605
关键字:

公众号爬虫

爬虫 订阅