精华内容
下载资源
问答
  • 很多的微信公众号都提供了质量比较高的文章阅读,对于自己喜欢的微信公众号,所以想做个微信公众号爬虫,爬取相关公众号的所有文章。抓取公众号的所有的文章,需要获取两个比较重要的参数。一个是微信公众号的唯一ID...

    很多的微信公众号都提供了质量比较高的文章阅读,对于自己喜欢的微信公众号,所以想做个微信公众号爬虫,爬取相关公众号的所有文章。抓取公众号的所有的文章,需要获取两个比较重要的参数。一个是微信公众号的唯一ID(__biz)和获取单一公众号的文章权限值wap_sid2。接下来说一下思路。

    爬取思路:

    要想获取微信公众号的爬虫,首先要唯一标识这个微信公众号,所以要获取这个微信公众号的id值(即__biz)。看了比较多的相关文章,很多获取__biz的值比较机械,单纯手动复制取__biz;现在搜狗引擎与微信公众号对接,为我们提供了一个很好的获取途径,微信公众号源码里面有该号的__biz值(可以从这个途径获取);但是搜狗引擎对微信公众号有限制,只显示最近10条文章,所以我们单纯只从搜狗引擎获取__biz值和通过搜狗搜索任意关键词公众号列表。

    下面是搜狗搜索微信公众号的URL地址,其中query的python是搜索的关键词,其他可以不变。

    http://weixin.sogou.com/weixin?type=1&s_from=input&query=python&ie=utf8&_sug_=n&_sug_type_=

    复制代码

    搜索的结果页面:

    1

    查看源代码

    在源代码中可以发现每一个公众号的链接,都是位于id为sougou_vr_11002301_box_n(n为整数如1,2,3等)下面的a标签href属性值。通过xpath语法可以获取,其中n的位置可以按规律顺序获取:

    //*[@id="sogou_vr_11002301_box_n"]/div/div[2]/p[1]/a

    复制代码

    获取到单个公众号的地址如下所示:

    http://mp.weixin.qq.com/profile?src=3&timestamp=1508003829&ver=1&signature=Eu9LOYSA47p6WE0mojhMtFR-gSr7zsQOYo6*w5VxrUgy7RbCsdkuzfFQ1RiSgM3i9buMZPrYzmOne6mJxCtW*g==

    复制代码

    打开单个公众号链接,获取公众号源码,取其中微信公众号的id值:

    1

    //其中biz值就是微信公众号的唯一id值。前面和后面省略了大部分代码;该段代码位于script标签里面;该代码还有最近10条文章的数据,如果单纯想获取最近10条,可以通过正则表达式来直接获取

    var biz = "MzIwNDA1OTM4NQ==" || "";

    var src = "3" ;

    var ver = "1" ;

    var timestamp = "1508003829" ;

    var signature = "Eu9LOYSA47p6WE0mojhMtFR-gSr7zsQOYo6*w5VxrUgy7RbCsdkuzfFQ1RiSgM3i9buMZPrYzmOne6mJxCtW*g==" ;

    var name="python6359"||"python";

    复制代码

    获取到微信公众号的id值之后,就是要获取wap_sid值(即单个微信公众号的文章权限值。)这个部分从微信客户端获取,接下来通过Fiddler抓包工具获取,如果不知道抓包工具的环境搭建,可以参考 fiddler抓取摩拜单车数据包

    获取微信公众号文章的权限值的url:

    GET /mp/profile_ext?action=home&__biz=MjM5MDI1ODUyMA==&scene=124&devicetype=iOS10.0.1&version=16051220&lang=zh_CN&nettype=WIFI&a8scene=3&fontScale=100&pass_ticket=ji%2B3JbA2NNExGwdNCoIa91sbgwDmSmHsdZhHP5eo%2Bgun%2By2V3lxc34GQy3W5u8mE&wx_header=1 HTTP/1.1

    复制代码

    相应的请求头,其中x-wechat-key是隔段时间更换一次,所以需要定时更换一次;X-WECHAT-UIN可以不变。pass_ticket也可以一段时间内不做改变:

    'Host':'mp.weixin.qq.com',

    # 'X-WECHAT-KEY': 'a83687cde3ca46be517cdbcba60732159f229a03507e9afa1e0dfee00e3cf00562aee022e84b9011924fdbb0c7af8c647c33b1338b11ebdc8893d5df41dd34a536e1af5b48d15c87b4aef629ad8685f3',

    'X-WECHAT-KEY': '33c1fdebcfc1d1ecd9df5003dc9d9ccb6a1f5458eb704e58a05e80c73e8793dede6b52115a74a515d4d12c9a6f2d8f00238afe17cca3635d80d661a612a4a0bf48a2547516b12030efd8a224548636d2',

    'X-WECHAT-UIN':'MTU2MzIxNjQwMQ%3D%3D',

    'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',

    'User-Agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Mobile/14A403 MicroMessenger/6.5.18 NetType/WIFI Language/zh_CN',

    'Accept-Language':'zh-cn',

    'Accept-Encoding':'gzip, deflate',

    'Connection':'keep-alive',

    'Cookie':'wxuin=1563216401;pass_ticket=oQDl45NRtfvQIxv2j2pYDSOOeflIXU7V3x1TUaOTpi6SkMp2B3fJwF6TE40ATCpU;ua_id=Wz1u21T8nrdNEyNaAAAAAOcFaBcyz4SH5DoQIVDcnao=;pgv_pvid=7103943278;sd_cookie_crttime=1501115135519;sd_userid=8661501115135519;3g_guest_id=-8872936809911279616;tvfe_boss_uuid=8ed9ed1b3a838836;mobileUV=1_15c8d374ca8_da9c8;pgv_pvi=8005854208',

    'Referer':"https://mp.weixin.qq.com/mp/getmasssendmsg?__biz=MjM5MzI5MTQ1Mg==&devicetype=iOS10.0.1&version=16051220&lang=zh_CN&nettype=WIFI&ascene=3&fontScale=100&pass_ticket=oQDl45NRtfvQIxv2j2pYDSOOeflIXU7V3x1TUaOTpi6SkMp2B3fJwF6TE40ATCpU&wx_header=1"

    复制代码

    上面的请求url获取的返回响应头,是设置wap_sid2获取单一公众号文章的权限值,我们就是要获取set-cookies中的wap-sid2值:

    HTTP/1.1 200 OK

    Content-Type: text/html; charset=UTF-8

    Cache-Control: no-cache, must-revalidate

    Strict-Transport-Security: max-age=15552000

    Set-Cookie: wxuin=1563216401; Path=/; HttpOnly

    Set-Cookie: pass_ticket=ji+3JbA2NNExGwdNCoIa91sbgwDmSmHsdZhHP5eo+gun+y2V3lxc34GQy3W5u8mE; Path=/; HttpOnly

    Set-Cookie: wap_sid2=CJGUs+kFElxER01KN1ZkVElJMUdhTktDUUk2LUZHNkFwT1Rzc1EwUWpWaW5ZMHlFQi15cUo1VWFjamNLM3pjdzNCbDc2ZFZpOW0xeDdPb0czWXNuQUdmbVdyOFZiNTREQUFBfjC+7YvPBTgMQJRO; Path=/; HttpOnly

    Connection: keep-alive

    Content-Length: 37211

    复制代码

    获取公众号列表数据

    获取wap_sid2权限值

    获取到公众号id值__biz和权限值wap_sid2;我们就可以构造请求获取文章列表了。其中mongodb操作是为了获取公众号id值,然后根据id值,获取wap_sid2值,然后把id值和wap_sid2对应入库。

    # -*- coding: utf-8 -*-

    from scrapy import Spider,Request

    from .mongo import MongoOperate

    import re

    from wechatSpider.items import GetsessionspiderItem

    from .settings import *

    class GetsessionSpider(Spider):

    name = "getSession"

    allowed_domains = ["mp.weixin.qq.com"]

    start_urls = ['https://mp.weixin.qq.com/']

    headers={

    'Host':'mp.weixin.qq.com',

    # 'X-WECHAT-KEY': 'a83687cde3ca46be517cdbcba60732159f229a03507e9afa1e0dfee00e3cf00562aee022e84b9011924fdbb0c7af8c647c33b1338b11ebdc8893d5df41dd34a536e1af5b48d15c87b4aef629ad8685f3',

    'X-WECHAT-KEY': '33c1fdebcfc1d1ecd9df5003dc9d9ccb6a1f5458eb704e58a05e80c73e8793dede6b52115a74a515d4d12c9a6f2d8f00238afe17cca3635d80d661a612a4a0bf48a2547516b12030efd8a224548636d2',

    'X-WECHAT-UIN':'MTU2MzIxNjQwMQ%3D%3D',

    'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',

    'User-Agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Mobile/14A403 MicroMessenger/6.5.18 NetType/WIFI Language/zh_CN',

    'Accept-Language':'zh-cn',

    'Accept-Encoding':'gzip, deflate',

    'Connection':'keep-alive',

    'Cookie':'wxuin=1563216401;pass_ticket=oQDl45NRtfvQIxv2j2pYDSOOeflIXU7V3x1TUaOTpi6SkMp2B3fJwF6TE40ATCpU;ua_id=Wz1u21T8nrdNEyNaAAAAAOcFaBcyz4SH5DoQIVDcnao=;pgv_pvid=7103943278;sd_cookie_crttime=1501115135519;sd_userid=8661501115135519;3g_guest_id=-8872936809911279616;tvfe_boss_uuid=8ed9ed1b3a838836;mobileUV=1_15c8d374ca8_da9c8;pgv_pvi=8005854208',

    'Referer':"https://mp.weixin.qq.com/mp/getmasssendmsg?__biz=MjM5MzI5MTQ1Mg==&devicetype=iOS10.0.1&version=16051220&lang=zh_CN&nettype=WIFI&ascene=3&fontScale=100&pass_ticket=oQDl45NRtfvQIxv2j2pYDSOOeflIXU7V3x1TUaOTpi6SkMp2B3fJwF6TE40ATCpU&wx_header=1"

    }

    # 查看历史消息列表,现在需要捕获`wap_sid2`这个值,来获取访问权限

    url="https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz={biz}&scene=124&devicetype=iOS10.0.1&version=16051220&lang=zh_CN&nettype=WIFI&a8scene=3&fontScale=100&pass_ticket=oQDl45NRtfvQIxv2j2pYDSOOeflIXU7V3x1TUaOTpi6SkMp2B3fJwF6TE40ATCpU&wx_header=1"

    def start_requests(self):

    MongoObj=MongoOperate(MONGO_URI,MONGO_DATABASE,MONGO_USER,MONGO_PASS,WECHATID)

    MongoObj.connect()

    items=MongoObj.finddata()

    for item in items:

    biz=item["wechatID"]

    yield Request(url=self.url.format(biz=biz),dont_filter=True,headers=self.headers,callback=self.parse,meta={"proxy":"http://127.0.0.1:8888","biz":biz})

    def parse(self, response):

    item=GetsessionspiderItem()

    data=response.headers

    needCon=data["Set-Cookie"]

    wap=needCon.decode("utf-8")

    wap=wap.split(';')

    wap=wap[0].split('=')

    wap_sid2=wap[1]

    print(wap_sid2)

    item["biz"]=response.request.meta["biz"]

    item["wap_sid2"]=str(wap_sid2)

    yield item

    # print(item)

    复制代码

    1

    获取文章数据列表

    在mongoDB中保存着一个公众号的id值及对应的wap_sid2值,接下来构造请求文章的值,也是获取公众号文章列表url。

    # -*- coding: utf-8 -*-

    import scrapy

    from scrapy import Request

    from .mongo import MongoOperate

    import json

    from .settings import *

    class DataSpider(scrapy.Spider):

    name = "data"

    allowed_domains = ["mp.weixin.qq.com"]

    start_urls = ['https://mp.weixin.qq.com/']

    count=10

    url="https://mp.weixin.qq.com/mp/profile_ext?action=getmsg&__biz={biz}&f=json&offset={index}&count=10&is_ok=1&scene=124&uin=777&key=777&pass_ticket=ULeI%2BILkTLA2IpuIDqbIla4jG6zBTm1jj75UIZCgIUAFzOX29YQeTm5UKYuXU6JY&wxtoken=&appmsg_token=925_%252B4oEmoVo6AFzfOotcwPrPnBvKbEdnLNzg5mK8Q~~&x5=0&f=json"

    def start_requests(self):

    MongoObj=MongoOperate(MONGO_URI,MONGO_DATABASE,MONGO_USER,MONGO_PASS,RESPONSE)

    MongoObj.connect()

    items=MongoObj.finddata()

    for item in items:

    headers={

    'Accept-Encoding':'gzip, deflate',

    'Connection':'keep-alive',

    'Accept':'*/*',

    'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Mobile/14A403 MicroMessenger/6.5.18 NetType/WIFI Language/zh_CN',

    'Accept-Language': 'zh-cn',

    'X-Requested-With': 'XMLHttpRequest',

    'X-WECHAT-KEY': '62526065241838a5d44f7e7e14d5ffa3e87f079dc50a66e615fe9b6169c8fdde0f7b9f36f3897212092d73a3a223ffd21514b690dd8503b774918d8e86dfabbf46d1aedb66a2c7d29b8cc4f017eadee6',

    'X-WECHAT-UIN': 'MTU2MzIxNjQwMQ%3D%3D',

    'Cookie':';wxuin=1563216401;pass_ticket=oQDl45NRtfvQIxv2j2pYDSOOeflIXU7V3x1TUaOTpi6SkMp2B3fJwF6TE40ATCpU;ua_id=Wz1u21T8nrdNEyNaAAAAAOcFaBcyz4SH5DoQIVDcnao=;pgv_pvid=7103943278;sd_cookie_crttime=1501115135519;sd_userid=8661501115135519;3g_guest_id=-8872936809911279616;tvfe_boss_uuid=8ed9ed1b3a838836;mobileUV=1_15c8d374ca8_da9c8;pgv_pvi=8005854208'

    }

    biz=item["biz"]

    #主要验证是wap_sid2;pass_ticket不一样无所谓

    headers["Cookie"]="wap_sid2="+item["wap_sid2"]+headers["Cookie"]

    yield Request(url=self.url.format(biz=biz,index="10"),headers=headers,callback=self.parse,dont_filter=True,meta={"biz":biz,"headers":headers},)

    def parse(self, response):

    biz=response.request.meta["biz"]

    headers=response.request.meta["headers"]

    resText=json.loads(response.text)

    print(resText)

    list=json.loads(resText["general_msg_list"])

    print(list)

    yield list

    if resText["can_msg_continue"]==1:

    self.count=self.count+10

    yield Request(url=self.url.format(biz=biz,index=str(self.count)),headers=headers,callback=self.parse,dont_filter=True,meta={"biz":biz,"headers":headers})

    else:

    print("end")

    复制代码

    获取到的数据如下图所示:

    1

    获取wap_sid另外一种思路

    在爬取的过程中,有时候经过抓包,想获取一个重定向的网页的响应头;但是响应头cookies已经设置read only,我们想通过这里获取权限值,可以通过设置Fiddler的rules来生成保存响应文件。在微信文章爬取过程中,虽然也是想通过这种方式获取权限值。但是发觉自己是忽略了请求头x-wechat-key和x-wechat-uin所以获取不到。所以这种方式在该项目并不需要。但是提供一种获取动态设置cookies值,然后重定向到新页面的响应头方法,比如获取 mp.weixin.qq.com/mp/profile_…

    1

    在Fiddler添加以下代码,然后在桌面生成一个2.txt文件,上面保存返回的响应头:

    static function OnBeforeResponse(oSession: Session) {

    if (oSession.HostnameIs("mp.weixin.qq.com") && oSession.uriContains("/mp/profile_ext?action=home")) {

    oSession["ui-color"] = "orange";

    oSession.SaveResponse("C:\\Users\\Administrator\\Desktop\\2.txt",false);

    //oSession.SaveResponseBody("C:\\Users\\Administrator\\Desktop\\1.txt")

    }

    if (m_Hide304s && oSession.responseCode == 304) {

    oSession["ui-hide"] = "true";

    }

    }

    复制代码

    1

    展开全文
  • 微信公众号文章爬虫

    2019-05-18 01:51:45
    很多的微信公众号都提供了质量比较高的文章阅读,对于自己喜欢的微信公众号,所以想做个微信公众号爬虫,爬取相关公众号的所有文章。抓取公众号的所有的文章,需要获取两个比较重要的参数。一个是微信公众号的唯一ID...

    很多的微信公众号都提供了质量比较高的文章阅读,对于自己喜欢的微信公众号,所以想做个微信公众号爬虫,爬取相关公众号的所有文章。抓取公众号的所有的文章,需要获取两个比较重要的参数。一个是微信公众号的唯一ID(__biz)和获取单一公众号的文章权限值wap_sid2。接下来说一下思路。

    爬取思路:

     要想获取微信公众号的爬虫,首先要唯一标识这个微信公众号,所以要获取这个微信公众号的id值(即__biz)。看了比较多的相关文章,很多获取__biz的值比较机械,单纯手动复制取__biz;现在搜狗引擎与微信公众号对接,为我们提供了一个很好的获取途径,微信公众号源码里面有该号的__biz值(可以从这个途径获取);但是搜狗引擎对微信公众号有限制,只显示最近10条文章,所以我们单纯只从搜狗引擎获取__biz值和通过搜狗搜索任意关键词公众号列表。

     下面是搜狗搜索微信公众号的URL地址,其中query的python是搜索的关键词,其他可以不变。

    http://weixin.sogou.com/weixin?type=1&s_from=input&query=python&ie=utf8&_sug_=n&_sug_type_=
    复制代码

    搜索的结果页面:

    查看源代码

    在源代码中可以发现每一个公众号的链接,都是位于id为sougou_vr_11002301_box_n(n为整数如1,2,3等)下面的a标签href属性值。通过xpath语法可以获取,其中n的位置可以按规律顺序获取:

    //*[@id="sogou_vr_11002301_box_n"]/div/div[2]/p[1]/a
    复制代码

    获取到单个公众号的地址如下所示:

    http://mp.weixin.qq.com/profile?src=3&timestamp=1508003829&ver=1&signature=Eu9LOYSA47p6WE0mojhMtFR-gSr7zsQOYo6*w5VxrUgy7RbCsdkuzfFQ1RiSgM3i9buMZPrYzmOne6mJxCtW*g==
    复制代码

    打开单个公众号链接,获取公众号源码,取其中微信公众号的id值:

    //其中biz值就是微信公众号的唯一id值。前面和后面省略了大部分代码;该段代码位于script标签里面;该代码还有最近10条文章的数据,如果单纯想获取最近10条,可以通过正则表达式来直接获取
    var biz = "MzIwNDA1OTM4NQ==" || "";
    var src = "3" ; 
    var ver = "1" ; 
    var timestamp = "1508003829" ; 
    var signature = "Eu9LOYSA47p6WE0mojhMtFR-gSr7zsQOYo6*w5VxrUgy7RbCsdkuzfFQ1RiSgM3i9buMZPrYzmOne6mJxCtW*g==" ; 
    var name="python6359"||"python";
    复制代码

    获取到微信公众号的id值之后,就是要获取wap_sid值(即单个微信公众号的文章权限值。)这个部分从微信客户端获取,接下来通过Fiddler抓包工具获取,如果不知道抓包工具的环境搭建,可以参考 fiddler抓取摩拜单车数据包

    获取微信公众号文章的权限值的url:

    GET /mp/profile_ext?action=home&__biz=MjM5MDI1ODUyMA==&scene=124&devicetype=iOS10.0.1&version=16051220&lang=zh_CN&nettype=WIFI&a8scene=3&fontScale=100&pass_ticket=ji%2B3JbA2NNExGwdNCoIa91sbgwDmSmHsdZhHP5eo%2Bgun%2By2V3lxc34GQy3W5u8mE&wx_header=1 HTTP/1.1
    复制代码

    相应的请求头,其中x-wechat-key是隔段时间更换一次,所以需要定时更换一次;X-WECHAT-UIN可以不变。pass_ticket也可以一段时间内不做改变:

    'Host':'mp.weixin.qq.com',
    # 'X-WECHAT-KEY': 'a83687cde3ca46be517cdbcba60732159f229a03507e9afa1e0dfee00e3cf00562aee022e84b9011924fdbb0c7af8c647c33b1338b11ebdc8893d5df41dd34a536e1af5b48d15c87b4aef629ad8685f3',
    'X-WECHAT-KEY': '33c1fdebcfc1d1ecd9df5003dc9d9ccb6a1f5458eb704e58a05e80c73e8793dede6b52115a74a515d4d12c9a6f2d8f00238afe17cca3635d80d661a612a4a0bf48a2547516b12030efd8a224548636d2',
    'X-WECHAT-UIN':'MTU2MzIxNjQwMQ%3D%3D',
    'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
    'User-Agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Mobile/14A403 MicroMessenger/6.5.18 NetType/WIFI Language/zh_CN',
    'Accept-Language':'zh-cn',
    'Accept-Encoding':'gzip, deflate',
    'Connection':'keep-alive',
    'Cookie':'wxuin=1563216401;pass_ticket=oQDl45NRtfvQIxv2j2pYDSOOeflIXU7V3x1TUaOTpi6SkMp2B3fJwF6TE40ATCpU;ua_id=Wz1u21T8nrdNEyNaAAAAAOcFaBcyz4SH5DoQIVDcnao=;pgv_pvid=7103943278;sd_cookie_crttime=1501115135519;sd_userid=8661501115135519;3g_guest_id=-8872936809911279616;tvfe_boss_uuid=8ed9ed1b3a838836;mobileUV=1_15c8d374ca8_da9c8;pgv_pvi=8005854208',
    'Referer':"https://mp.weixin.qq.com/mp/getmasssendmsg?__biz=MjM5MzI5MTQ1Mg==&devicetype=iOS10.0.1&version=16051220&lang=zh_CN&nettype=WIFI&ascene=3&fontScale=100&pass_ticket=oQDl45NRtfvQIxv2j2pYDSOOeflIXU7V3x1TUaOTpi6SkMp2B3fJwF6TE40ATCpU&wx_header=1"
    复制代码

    上面的请求url获取的返回响应头,是设置wap_sid2获取单一公众号文章的权限值,我们就是要获取set-cookies中的wap-sid2值:

    HTTP/1.1 200 OK
    Content-Type: text/html; charset=UTF-8
    Cache-Control: no-cache, must-revalidate
    Strict-Transport-Security: max-age=15552000
    Set-Cookie: wxuin=1563216401; Path=/; HttpOnly
    Set-Cookie: pass_ticket=ji+3JbA2NNExGwdNCoIa91sbgwDmSmHsdZhHP5eo+gun+y2V3lxc34GQy3W5u8mE; Path=/; HttpOnly
    Set-Cookie: wap_sid2=CJGUs+kFElxER01KN1ZkVElJMUdhTktDUUk2LUZHNkFwT1Rzc1EwUWpWaW5ZMHlFQi15cUo1VWFjamNLM3pjdzNCbDc2ZFZpOW0xeDdPb0czWXNuQUdmbVdyOFZiNTREQUFBfjC+7YvPBTgMQJRO; Path=/; HttpOnly
    Connection: keep-alive
    Content-Length: 37211
    复制代码

    获取公众号列表数据

    获取wap_sid2权限值

    获取到公众号id值__biz和权限值wap_sid2;我们就可以构造请求获取文章列表了。其中mongodb操作是为了获取公众号id值,然后根据id值,获取wap_sid2值,然后把id值和wap_sid2对应入库。

    # -*- coding: utf-8 -*-
    from scrapy import Spider,Request
    from .mongo import MongoOperate
    import re
    from wechatSpider.items import GetsessionspiderItem
    from .settings import *
    class GetsessionSpider(Spider):
        name = "getSession"
        allowed_domains = ["mp.weixin.qq.com"]
        start_urls = ['https://mp.weixin.qq.com/']
        headers={
            'Host':'mp.weixin.qq.com',
            # 'X-WECHAT-KEY': 'a83687cde3ca46be517cdbcba60732159f229a03507e9afa1e0dfee00e3cf00562aee022e84b9011924fdbb0c7af8c647c33b1338b11ebdc8893d5df41dd34a536e1af5b48d15c87b4aef629ad8685f3',
            'X-WECHAT-KEY': '33c1fdebcfc1d1ecd9df5003dc9d9ccb6a1f5458eb704e58a05e80c73e8793dede6b52115a74a515d4d12c9a6f2d8f00238afe17cca3635d80d661a612a4a0bf48a2547516b12030efd8a224548636d2',
            'X-WECHAT-UIN':'MTU2MzIxNjQwMQ%3D%3D',
            'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
            'User-Agent':'Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Mobile/14A403 MicroMessenger/6.5.18 NetType/WIFI Language/zh_CN',
            'Accept-Language':'zh-cn',
            'Accept-Encoding':'gzip, deflate',
            'Connection':'keep-alive',
            'Cookie':'wxuin=1563216401;pass_ticket=oQDl45NRtfvQIxv2j2pYDSOOeflIXU7V3x1TUaOTpi6SkMp2B3fJwF6TE40ATCpU;ua_id=Wz1u21T8nrdNEyNaAAAAAOcFaBcyz4SH5DoQIVDcnao=;pgv_pvid=7103943278;sd_cookie_crttime=1501115135519;sd_userid=8661501115135519;3g_guest_id=-8872936809911279616;tvfe_boss_uuid=8ed9ed1b3a838836;mobileUV=1_15c8d374ca8_da9c8;pgv_pvi=8005854208',
            'Referer':"https://mp.weixin.qq.com/mp/getmasssendmsg?__biz=MjM5MzI5MTQ1Mg==&devicetype=iOS10.0.1&version=16051220&lang=zh_CN&nettype=WIFI&ascene=3&fontScale=100&pass_ticket=oQDl45NRtfvQIxv2j2pYDSOOeflIXU7V3x1TUaOTpi6SkMp2B3fJwF6TE40ATCpU&wx_header=1"
        }
        # 查看历史消息列表,现在需要捕获`wap_sid2`这个值,来获取访问权限
        url="https://mp.weixin.qq.com/mp/profile_ext?action=home&__biz={biz}&scene=124&devicetype=iOS10.0.1&version=16051220&lang=zh_CN&nettype=WIFI&a8scene=3&fontScale=100&pass_ticket=oQDl45NRtfvQIxv2j2pYDSOOeflIXU7V3x1TUaOTpi6SkMp2B3fJwF6TE40ATCpU&wx_header=1"
        def start_requests(self):
            MongoObj=MongoOperate(MONGO_URI,MONGO_DATABASE,MONGO_USER,MONGO_PASS,WECHATID)
            MongoObj.connect()
            items=MongoObj.finddata()
            for item in items:
                biz=item["wechatID"]
                yield Request(url=self.url.format(biz=biz),dont_filter=True,headers=self.headers,callback=self.parse,meta={"proxy":"http://127.0.0.1:8888","biz":biz})
        def parse(self, response):
           item=GetsessionspiderItem()
           data=response.headers
           needCon=data["Set-Cookie"]
           wap=needCon.decode("utf-8")
           wap=wap.split(';')
           wap=wap[0].split('=')
           wap_sid2=wap[1]
           print(wap_sid2)
           item["biz"]=response.request.meta["biz"]
           item["wap_sid2"]=str(wap_sid2)
           yield item
           # print(item)
    复制代码

    获取文章数据列表

    在mongoDB中保存着一个公众号的id值及对应的wap_sid2值,接下来构造请求文章的值,也是获取公众号文章列表url。

    # -*- coding: utf-8 -*-
    import scrapy
    from scrapy import Request
    from .mongo import MongoOperate
    import json
    from .settings import *
    class DataSpider(scrapy.Spider):
        name = "data"
        allowed_domains = ["mp.weixin.qq.com"]
        start_urls = ['https://mp.weixin.qq.com/']
        count=10
        url="https://mp.weixin.qq.com/mp/profile_ext?action=getmsg&__biz={biz}&f=json&offset={index}&count=10&is_ok=1&scene=124&uin=777&key=777&pass_ticket=ULeI%2BILkTLA2IpuIDqbIla4jG6zBTm1jj75UIZCgIUAFzOX29YQeTm5UKYuXU6JY&wxtoken=&appmsg_token=925_%252B4oEmoVo6AFzfOotcwPrPnBvKbEdnLNzg5mK8Q~~&x5=0&f=json"
        def start_requests(self):
            MongoObj=MongoOperate(MONGO_URI,MONGO_DATABASE,MONGO_USER,MONGO_PASS,RESPONSE)
            MongoObj.connect()
            items=MongoObj.finddata()
            for item in items:
                headers={
                    'Accept-Encoding':'gzip, deflate',
                    'Connection':'keep-alive',
                    'Accept':'*/*',
                    'User-Agent': 'Mozilla/5.0 (iPhone; CPU iPhone OS 10_0_1 like Mac OS X) AppleWebKit/602.1.50 (KHTML, like Gecko) Mobile/14A403 MicroMessenger/6.5.18 NetType/WIFI Language/zh_CN',
                    'Accept-Language': 'zh-cn',
                    'X-Requested-With': 'XMLHttpRequest',
                    'X-WECHAT-KEY': '62526065241838a5d44f7e7e14d5ffa3e87f079dc50a66e615fe9b6169c8fdde0f7b9f36f3897212092d73a3a223ffd21514b690dd8503b774918d8e86dfabbf46d1aedb66a2c7d29b8cc4f017eadee6',
                    'X-WECHAT-UIN': 'MTU2MzIxNjQwMQ%3D%3D',
                    'Cookie':';wxuin=1563216401;pass_ticket=oQDl45NRtfvQIxv2j2pYDSOOeflIXU7V3x1TUaOTpi6SkMp2B3fJwF6TE40ATCpU;ua_id=Wz1u21T8nrdNEyNaAAAAAOcFaBcyz4SH5DoQIVDcnao=;pgv_pvid=7103943278;sd_cookie_crttime=1501115135519;sd_userid=8661501115135519;3g_guest_id=-8872936809911279616;tvfe_boss_uuid=8ed9ed1b3a838836;mobileUV=1_15c8d374ca8_da9c8;pgv_pvi=8005854208'
    
                }
                biz=item["biz"]
            #主要验证是wap_sid2;pass_ticket不一样无所谓
                headers["Cookie"]="wap_sid2="+item["wap_sid2"]+headers["Cookie"]
                yield Request(url=self.url.format(biz=biz,index="10"),headers=headers,callback=self.parse,dont_filter=True,meta={"biz":biz,"headers":headers},)
        def parse(self, response):
            biz=response.request.meta["biz"]
            headers=response.request.meta["headers"]
            resText=json.loads(response.text)
            print(resText)
            list=json.loads(resText["general_msg_list"])
            print(list)
            yield list
            if resText["can_msg_continue"]==1:
                self.count=self.count+10
                yield Request(url=self.url.format(biz=biz,index=str(self.count)),headers=headers,callback=self.parse,dont_filter=True,meta={"biz":biz,"headers":headers})
             else:
                print("end")
    复制代码

    获取到的数据如下图所示:

    获取wap_sid另外一种思路

    在爬取的过程中,有时候经过抓包,想获取一个重定向的网页的响应头;但是响应头cookies已经设置read only,我们想通过这里获取权限值,可以通过设置Fiddler的rules来生成保存响应文件。在微信文章爬取过程中,虽然也是想通过这种方式获取权限值。但是发觉自己是忽略了请求头x-wechat-keyx-wechat-uin所以获取不到。所以这种方式在该项目并不需要。但是提供一种获取动态设置cookies值,然后重定向到新页面的响应头方法,比如获取 mp.weixin.qq.com/mp/profile_…

    在Fiddler添加以下代码,然后在桌面生成一个2.txt文件,上面保存返回的响应头:

    static function OnBeforeResponse(oSession: Session) {
       if (oSession.HostnameIs("mp.weixin.qq.com") && oSession.uriContains("/mp/profile_ext?action=home")) {
           oSession["ui-color"] = "orange";
           oSession.SaveResponse("C:\\Users\\Administrator\\Desktop\\2.txt",false);
           //oSession.SaveResponseBody("C:\\Users\\Administrator\\Desktop\\1.txt")
       }
       if (m_Hide304s && oSession.responseCode == 304) {
           oSession["ui-hide"] = "true";
       }
    }
    复制代码

    Github地址:
    github.com/Harhao/wech…
    参考文章:
    微信客户端公众号爬虫

    展开全文
  • 基于 Python 实现微信公众号爬虫 『课程目录』: 0微信公众号爬虫的基本原理 1使用 Requests 实现一个简单网页爬虫 2使用 Fiddler 抓包分析公众号请求过程 3抓取微信公众号第一篇文章 4...
  • 快速搭建一个基于《搜狗微信公众号》的微信公众号爬虫教程,教你分分钟爬取微信公众号文章

    这个教程是基于我开源的一份python源码,各位看官请先下载源码。

    源码下载地址:https://github.com/jaryee/wechat_sogou_crawl


    环境配置咱这里就不讲了,网上一大堆教程,请先配置好python2.7+mysql

    注意,python版本为2.7,需要安装如下模块:

    requests 、pymysql、lxml、Pillow、werkzeug

    安装就是在CMD控制台里直接:pip install pymysql  回车

    安装时如果某个模块安装失败,可以去下面这个网址里下载别人编译好的whl模块文件,下载自己对应的版本

    http://www.lfd.uci.edu/~gohlke/pythonlibs

    下载好后直接在CMD控制台里:pip install xxx.whl 回车就可以了


    好,现在来创建对应的数据库,先创建一个数据库,名字随意,比如:jubang,格式为 utf8mb4,创建好后在该数据库导入刚才下载的源码包里的:jubang.sql文件,

    这样,数据库表就创建完成了,一共有4个表,分别是:

    mp_info:所有咱们需要抓取的公众号信息都保存在这里

    wenzhang_info:公众号发布的文章信息都保存在这里

    wenzhang_statistics:每次抓取文章阅读及点攒时,都在会这个表里保存一份增量数据,可以使用该表中的数据生成一篇文章的阅读变化趋势图

    add_mp_list:这个表是用来增加指定的公众号的,咱想要抓哪个公众号,就打开这个表,把公众号名称或者公众号的微信号加入这个表,然后执行一下源码中的auto_add_mp.py就可以啦


    下面打开源码包中的config.py文件,将其中数据库的设置,修改为你的数据库信息,用户名密码,ip之类的,到这里我们就成功部署好了搜狗微信爬虫啦,现在来看看他的能力吧!


    如何使用爬虫呢?

    一、更新数据库最新文章

    执行updatemp.py,就会去查看咱指定的公众号是否有新文章发布了,如果有,就把新发布的文章入库,这里咱做了 排重,不会重复抓相同文章


    二、更新文章阅读数据

    执行updatewenzhang.py,就会去更新文章表中的最近24小时之内的文章阅读数据,如果修改为指定时间,比如12小时或36小时,可以修改updatewenzhang.py文件,大家自己看一下文件中有注释解释了如何修改


    三、添加指定的公众号

    打开数据库表add_mp_list,把想要抓取的公众号名称或者公众号的微信号加入这个表,可以一次增加多条,然后执行一下源码中的auto_add_mp.py就可以啦


    注意:搜狗微信网站如果访问频繁了会出现验证码,导致我们不能正常爬取,不要怕,咱的代码里已经加了验证码自动识别模块:若快识别,请在下面的链接中注册若快用户,然后把注册的用户和密码填写到源码中的config.py文件中就可以啦,若快识别大约是两个验证码1分钱,大家根据自己的需要充值就可以了

    http://www.ruokuai.com


    好啦,到这里基于搜狗微信的公众号爬虫就全部搞定啦,是不是非常简单,让我们快乐的爬起来吧,哈哈~~


    后面还会有基于微信接口的教程,搜狗微信无法抓取公众号全部历史文章及阅读数据,而基于微信接口就可以实现这个伟大的目标了,大家一起期待吧!


    您的支持,就是我开源的动力!!!


    展开全文
  • 微信公众号爬虫

    2019-01-30 18:14:32
    用python爬取微信公众号内容 主要内容: 爬虫基本原理 爬虫工具 Requests 的基本使用 数据抓包分析工具 Fiddler 的基本使用 MongoDB 数据库的基本使用 使用 Pandas 进行数据分析 使用 Matplotlib 进行数据可视化展示
  • 一步步教你打造微信公众号文章爬虫(1)-综述 一步步教你打造微信公众号文章爬虫(2)-下载网页 有朋友反馈前两篇写得有点啰嗦,那这次就换个风格,只讲重点。有不懂的群里交流吧。 前面文章中...

    本文为本专题第3篇,如果你基础不错的话只看这一篇的讲解及源代码应该就能轻松实现批量下载所有文章了,基础稍差的可以先看一下前两篇,只要你有点基础,有点耐心,八成朋友都至少能照葫芦画瓢实现批量下载文章的功能。

    一步步教你打造微信公众号文章爬虫(1)-综述

    一步步教你打造微信公众号文章爬虫(2)-下载网页

    有朋友反馈前两篇写得有点啰嗦,那这次就换个风格,只讲重点。有不懂的群里交流吧。

    前面文章中我们搞定了下载一篇文章,接下来研究批量下载。

    有的朋友可能会说:这个还不简单,一个for循环搞定。但批量下载,是之前研究这个项目的朋友们卡住最多的地方。因为for不难,难的是你要循环啥东西:所有文章列表在哪里?

    打开电脑版微信,找到一个公众号的历史文章列表页。

    在文章列表中下滑鼠标,会看到有文章列表不停加载出来。我们要想办法把这些列表提取出来。

    直接看下图,正常状态下,电脑版微信发送请求给微信服务器,微信服务器返回数据给电脑,再显示出来。

    我们可以在两者之前插入一个代理,即图中所示的Fiddler软件,这样它可以抓取到微信服务器返回的信息。

    需要的工具叫 Fiddler ,它的官网有时会打不开,可以去pc.qq.com搜索Fiddler4(或者去文末QQ群的共享里下)、下载、安装。然后,想让Fiddler正常工作需要进行些配置,可以先照我说的做。建议先把本文全看完了再实际操作。

    提醒一下,Fiddler其实是一个系统代理软件,所以如果你的电脑上正在使用其他类型的代理软件请先关掉,否则可能无法正常工作。

    打开Fiddler,按下图操作。

    会弹出几个窗口,都点 Yes

    最后是这样的,打了3个钩。点OK保存即可。

    配置完成了,然后点软件左下角的方块,会显示 Capturing ,表示它此时处在可以抓取数据的状态,再点一下,恢复空白,表示暂停抓取。

     

    然后,在微信公众号的历史文章列表页往下划动,会看到Fiddler的左侧窗口有一堆数据在滚动,跟第一节中讲到的chrome开发者工具很像,其实这两个的功能基本一致,只不过开发者工具只能检测到在chrome中打开的网页,而Fiddler可以检测到整个电脑中所有的Http和Https请求(这两种方式主要是抓网页类型数据,其实电脑中还有其他类型的网络请求方式,比如微信聊天数据用这种方式就抓取不到,另外网页版的支付宝、网银支付都用了更高级的加密技术,不用担心。)

    点击某一行,右边会出现这一条请求的详细情况,与chrome开发者工具风格很像,Fiddler的功能更多更强大。

    多下拉几次,多加载一些文章,你就会发现规律:

    每次当出现新文章,都会出现一条下图红框所示url的请求。

    选中这一条,在右侧选择 JSON ,会看到一条格式化的 JSON 数据,仔细看general_msg_list,貌似就是返回的文章列表,为了确定一下,可以再点 JSON 左边的 Raw 标签,看最后一行,是一串很长的json字符串,就是它了。

    如果把每一条请求的返回字符串全都搜集起来,便得到了所有文章的列表。而Fiddler的给力之处正在于它可以帮我们把所抓到的消息都以文本的形式保存下来。

    那么,如果一个公众号有1000篇文章,要发多少次请求,下拉多少次才能把所有文章都列出来呢?只要你别太笨,应该至少能想到一个笨方法:不停往下拉文章列表,Fiddler便会抓取到所有的返回数据。本着先求有再求好,从简单到抽象的原则,我们就先这么抓,其实,在我刚开始批量采集的最初一段时间就是这么采集文章列表的,当然除了简单易上手还有些其他方面的考虑。

    在正式开始抓取之前,我们要先做点准备工作:Fiddler默认会把所有的经过本电脑的请求全都抓出来了,没必要全保存,最好能筛选一下。那我们需要的数据有什么特征呢?仔细看一下,我们所关注的数据的网址的前半部分都是

    开头的,那我们就让Fiddler只保留这样的网址。

    讲到这里,可能许多有点经验的朋友觉得我该介绍在Fiddler中写代码了,但是,我们不需要!让对python还似懂非懂的朋友再去学JScript语言有点压力山大,我们可以巧妙得利用Fiddler自身强大的筛选功能来搞定此事:

    看下图,在Fiddler的右侧,开启过滤功能,只显示url中带有指定关键字的请求,注意前面不要带https,填写完之后会自动保存。

    再去下滑微信文章列表,Fiddler中就只显示我们想要的网址了。

    接下来,看看怎么把上面列出来的这些内容全都保存到电脑上。

    先在本地新建一个C:\vWeChatFiles\rawlist文件夹。

    依次点Fiddler左上角的 File - Export Sessions - All Sessions,弹出一个对话框,选择 Raw Files , 点Next,又是一个对话框,保存目录设为我们刚才新建的文件夹。

    最后点Export ,软件会自动帮我们新建一个类似于C:\vWeChatFiles\rawlist\Dump-0805-15-00-45这样的文件夹,其中有几个json文件,如果你用记事本或者notepad++(强烈建议用后者)打开这些文件,就会看到这是标准的json格式,而Python中有现成的解析json的库。

    写代码之前先看看这些json格式的内容中都有什么,限于篇幅原因在此只提示大家利用好fiddler的json查看工具 +  bejson.com 这个网站,或者直接参照下面的2张图。

    解析出了文章列表,再结合第2篇中讲到的下载单篇文章的源代码稍加改造便可搞定,整个项目的源代码160行,难度不大。

    最后,你可能还在想,究竟要怎么拿到微信文章列表?要怎么自动下滑?你可能需要一个按键精灵,或者自己用python写段小代码,但这2个方案貌似都有点上手难度,不妨把这个作为考验大家智慧的小作业。因为,至少,您可以手动多点几下搞定,还因为,这种方式只是一个过渡方式。

    以上,就完成了整个批量下载文章的主流程。但这样做有至少3个明显的缺点:

    1. 需要手工翻文章列表页,且不能翻页太快,否则容易被微信限制。

    2. 列表中不包含最近的文章,因为最近文章不是以上文所述的网址形式出现的。

    3. 每下载一个新号,都要手动修改py文件中的保存目录。

    当然这些缺点都有解决办法,想把html转成pdf和word也不是啥难事,至于要不要在后面的文章写出来取决于本文是否达到了我的预期热度。

    但至少,看到这里的你,完全可以自主去保存想要的东西了,行动起来吧!

     

    说明:技术交流的乐趣在于各有付出各有收获共同进步。请不要私信要求我把之前做好的成品软件的所有源代码都公开出来,我不会便宜那些贼坏的伸手党们。

    展开全文
  • PHP微信公众号文章爬虫

    千次阅读 2019-06-04 22:06:11
    整理了一下前段时间写的php微信公众号文章的爬虫,解决了微信的防=防盗链机制,这里对图片进行了统一管理。代码使用tp3框架写的,可以根据实情换成tp5或者laravel框架的代码。 爬虫的参数可自行修改,我这里是...
  • 高效微信爬虫微信公众号爬虫,公众号历史文章,文章评论,文章阅读及在看数据更新,可视化网页,可部署于Windows服务器。 使用环境 基于Python3 ==> flask/mysql/redis/mitmproxy/pywin32等实现 查看及安装依赖...
  • 详细介绍微信公众号python爬虫

    千次阅读 2020-07-09 16:50:10
    最近接到新项目需要爬取微信公众号数据,接下来和大家分享一下 笔者在网上也有看到用**搜狗微信的api爬取数据,但是要想根据公众号爬取它所有的文章,发现行不通 它只有最近的文章,也就是说想获取他所有的文章,...
  • 服务端爬取实现见:微信公众号爬虫:服务端公众号文章数据采集 背景:在团队的学习方面需要每周收集开发方面的博客文章,汇总输出每周的技术周报。周报小组成员收集的文章大多数是来自微信公众号,公众号的内容相对...
  • GitHub 微信公众号爬虫推荐 本文推荐 GitHub 微信公众号爬虫article_spider 。 微信公众号爬虫有别于一般的网页爬虫,由于是一个相对封闭的内容平台,入口比较少,所以难度就有点大了。大概查找了一下,发觉基本上不...
  • 微信公众号爬虫项目(reptile)

    千次阅读 多人点赞 2020-07-25 09:45:07
    项目背景 个人在业余时间,写的一个以微信...爬虫项目,微信公众号文章爬虫,网站文章爬虫,群发邮件系统 项目架构 springBoot 单项目架构 已知爬取微信公众号有三种方法: 第一种:用搜狗微信公众号搜过,这
  • 文章目录需求产生微信爬虫使用直接粘贴公众号...所以搞了一个解析微信公众号文章的网页工具,解析公众号文章下载图片和html生成本地可离线浏览的网页副本。 基于这些,甚至还可以直接把文章爬取下来保存到自己的站点中
  • 一次微信公众号爬虫

    2019-10-10 18:18:34
    这里给大家分享一下最近做微信公众号文章爬虫的经历,其中肯定有许多不好的地方,希望大家斧正交流。 相信大家最近做微信公众号爬虫肯定遇到了很多的问题,其中最大的就是网上很多方法已经不能用了,比如搜狗微信...
  • 基于Python的微信公众号爬虫基于Python的微信公众号爬虫爬虫的基本原理爬虫的基本流程HTTP 请求格式HTTP 响应格式 基于Python的微信公众号爬虫 Python是一种解释性的,高级的通用编程语言。 由Guido van Rossum创建...
  • 由于微信公众号爬虫的特殊性,微信公众号爬虫始终是爬虫工程师比较头疼的一个问题。 本文主要介绍一下目前市面上各种爬虫的优劣性以及适用群体 如果您有任何不同见解,或者除文中四种方式之外的方式.欢迎留言跟我...
  • mitmdump+appium+ip代理池+adb ...微信公众号排行榜:清博大数据、新榜等 问题: 取历史信息页时,最重要4个参数: __biz:微信公众平台对外公布的公众帐号的唯一id uin=: key=:key值有效期:...
  • Python爬虫五:微信公众号爬虫-2018.9

    万次阅读 多人点赞 2018-09-08 23:26:19
    ---全部文章: 京东爬虫 、链家爬虫、美团爬虫微信公众号爬虫、字体反爬、Django笔记、阿里云部署、vi\vim入门---- 分析:关于微信公众号的爬取,网上搜索了一下,主要有几种方法: 一、搜狗微信公众平台 ...
  • hello,小伙伴们,大家好,今天给大家分享的开源项目是微信公众号爬虫,感兴趣的朋友可以参考一下这个开源项目,看看是否可以给你提供一个新的思路。 项目简介 基于搜狗微信搜索的微信公众号爬虫接口,可以扩展成...
  • 前两篇链接:乐了:一步步教你打造文章爬虫(1)-综述一步步教你打造微信公众号文章爬虫(2)-下载网页有朋友反馈前两篇写得有点啰嗦,那这次就换个风格,只讲重点。有不懂的群里交流吧。前面文章中我们搞定...
  • 使用AnyProxy自动爬取微信公众号数据-包括阅读数和点赞数 目录 使用AnyProxy自动爬取微信公众号数据-包括阅读数和点赞数 目录 准备工作: 原理图 1.安装Node.js 2.安装AnyProxy 代理服务器 3. 启动AnyProxy 4. ...
  • 我订阅了 253 个公众号,有时候想再找之前读过的文章,发现搜索起来特别困难,如果忘了收藏,估计得找半小时,更让人无语的是,文章...最近正好看到一个牛逼的 Python 爬虫项目,就是爬取微信公众号的文章的,看了...
  • 利用Python爬虫微信公众号文章,有详细的文档说明包括爬虫以及数据可视化, 还附带了源码。
  • 微信公众号数据采集

    千次阅读 2020-10-12 11:15:10
    5.注册一个微信公众号 2.采集文章连接 1.配置config.txt 2.启动程序 二、采集文章详细信息 1.配置detail_config.txt 2.启动程序 三、数据 1.数据库 2.Execl 最近统计感兴趣的公众号的阅读数据,这篇文章就...
  • 微信公众号数据的采集有两个途径: 1,搜狗微信:因为搜狗与微信有合作,所以可以用搜狗微信进行采集;这个一个公众号只能采集最新的10条,要是获取历史文章就捉襟见肘了。而且要注意爬取频率,频率高会有验证码,...
  • for item in content_json["app_msg_list"]: # 提取每页文章的标题及对应的url print(item["title"], "url": item["link"]) 以上,即可爬取微信公众号的一页数据,如果是爬取所有页的数据,则需要改变number进行爬取...
  • 1、登陆公众号后台(也可以用selenium模拟登陆获取cookies)import requests import json import re import random import time import itchat itchat.auto_login(hotReload=True) friend = itchat.search_friends...
  • 本系列我将与大家一起学习批量下载任意公众号所有历史文章。 争取讲明白,源代码也会随着教程逐步放出来,但是不喜欢伸手党和不过如此党(凡事都说虽然我不会但我觉得不难的人)。 用户需要有一定的基础: 知道百度...
  • 微信公众号运营教(一)申请一个微信公众号 我们要创建一个个人公众号,首先需要申请一个公众号. 下面详细说说申请过程. 注册地址:https://mp.weixin.qq.com/ 或者直接搜索:微信公众号平台 填写注册信息:...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,268
精华内容 4,507
关键字:

微信公众号数据爬虫

爬虫 订阅