微信公众号内容提取怎么做?如何提取公众号内容?

作者:鱼爪创媒网 点击:225 发布时间:2021-11-11

  微信公众号内容提取怎么做?如何提取公众号内容?微信公众号内容提取出来后可以模仿微信公众号内容的设置,那么微信公众号内容提取怎么做呢?大家跟着小编往下看看吧。

  微信公众号内容提取怎么做?

  微信公众号内容提取一般都是通过微信公众号文章爬虫,可根据微信公众号或关键字在搜狗微信中搜索来爬取微信公众号的文章,爬取信息包括文章标题、作者、公众号名称、微信号、文章封面图、文章概述、文章内容、公众号头像、公众号介绍、公众号二维码、临时URL、原文链接等。微信公众号内容提取思路如下:

  1、用分析url, 发现列表和文章的key都是一个大障碍, 这个key对于有时间限制, 对于文章或列表均是唯一.

  2、获取文章列表: 暂时发现, 比较简单的方法是通过搜狗获得, 需要该公众号的openid, 另外在url里有时间戳. 如果不登录的话, 要先搜名字, 点进去该公众号, 再进去公众号的文章列表.

  3、爬取文章内容; 公众号页面是一个webapp, 不用selenium或phantomjs是跑不出来的.

  微信公众号内容提取微信代码如下:

  weixin_spider.py

  #!/usr/bin/python

  # coding: utf-8

  #这三行代码是防止在python2上面编码错误的,在python3上面不要要这样设置

  import sys

  reload(sys)

  sys.setdefaultencoding('utf-8')

  from urllib import quote

  from pyquery import PyQuery as pq

  from selenium import webdriver

  import requests

  import time

  import re

  import json

  import os

  #搜索入口地址,以公众为关键字搜索该公众号

  def get_search_result_by_keywords(sogou_search_url):

  # 爬虫伪装头部设置

  headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:51.0) Gecko/20100101 Firefox/51.0'}

  # 设置操作超时时长

  timeout = 5

  # 爬虫模拟在一个request.session中完成

  s = requests.Session()

  log(u'搜索地址为:%s' % sogou_search_url)

  return s.get(sogou_search_url, headers=headers, timeout=timeout).content

  #获得公众号主页地址

  def get_wx_url_by_sougou_search_html(sougou_search_html):

  doc = pq(sougou_search_html)

  return doc('div[class=txt-box]')('p[class=tit]')('a').attr('href')

  #使用webdriver 加载公众号主页内容,主要是js渲染的部分

  def get_selenium_js_html(url):

  browser = webdriver.PhantomJS(executable_path=r'D:Python2.7Scriptsphantomjs.exe')

  browser.get(url)

  time.sleep(3)

  # 执行js得到整个页面内容

  html = browser.execute_script("return document.documentElement.outerHTML")

  browser.close()

  return html

  #获取公众号文章内容

  def parse_wx_articles_by_html(selenium_html):

  doc = pq(selenium_html)

  return doc('div[class="weui_media_box appmsg"]')

  #将获取到的文章转换为字典

  def switch_arctiles_to_list(articles):

  #定义存贮变量

  articles_list = []

  i = 1

  #遍历找到的文章,解析里面的内容

  if articles:

  for article in articles.items():

  log(u'开始整合(%d/%d)' % (i, len(articles)))

  #处理单个文章

  articles_list.append(parse_one_article(article))

  i += 1

  return articles_list

  #解析单篇文章

  def parse_one_article( article):

  article_dict = {}

  #获取标题

  title = article('h4[class="weui_media_title"]').text().strip()

  ###log(u'标题是: %s' % title)

  #获取标题对应的地址

  url = 'http://mp.weixin.qq.com' + article('h4[class="weui_media_title"]').attr('hrefs')

  log(u'地址为: %s' % url)

  #获取概要内容

  summary = article('.weui_media_desc').text()

  log(u'文章简述: %s' % summary)

  #获取文章发表时间

  date = article('.weui_media_extra_info').text().strip()

  log(u'发表时间为: %s' % date)

  #获取封面图片

  pic = parse_cover_pic(article)

  #返回字典数据

  return {

  'title': title,

  'url': url,

  'summary': summary,

  'date': date,

  'pic': pic

  }

  #查找封面图片,获取封面图片地址

  def parse_cover_pic( article):

  pic = article('.weui_media_hd').attr('style')

  p = re.compile(r'background-image:url(.*?)')

  rs = p.findall(pic)

  log( u'封面图片是:%s ' % rs[0] if len(rs) > 0 else '')

  return rs[0] if len(rs) > 0 else ''

  #自定义log函数,主要是加上时间

  def log(msg):

  print u'%s: %s' % (time.strftime('%Y-%m-%d_%H-%M-%S'), msg)

  #验证函数

  def need_verify(selenium_html):

  ' 有时候对方会封锁ip,这里做一下判断,检测html中是否包含id=verify_change的标签,有的话,代表被重定向了,提醒过一阵子重试 '

  return pq(selenium_html)('#verify_change').text() != ''

  #创建公众号命名的文件夹

  def create_dir(keywords):

  if not os.path.exists(keywords):

  os.makedirs(keywords)

  #爬虫主函数

  def run(keywords):

  ' 爬虫入口函数 '

  #Step 0 : 创建公众号命名的文件夹

  create_dir(keywords)

  # 搜狐微信搜索链接入口

  sogou_search_url = 'http://weixin.sogou.com/weixin?type=1&query=%s&ie=utf8&s_from=input&_sug_=n&_sug_type_=' % quote(keywords)

  # Step 1:GET请求到搜狗微信引擎,以微信公众号英文名称作为查询关键字

  log(u'开始获取,微信公众号英文名为:%s' % keywords)

  log(u'开始调用sougou搜索引擎')

  sougou_search_html = get_search_result_by_keywords(sogou_search_url)

  # Step 2:从搜索结果页中解析出公众号主页链接

  log(u'获取sougou_search_html成功,开始抓取公众号对应的主页wx_url')

  wx_url = get_wx_url_by_sougou_search_html(sougou_search_html)

  log(u'获取wx_url成功,%s' % wx_url)

  # Step 3:Selenium+PhantomJs获取js异步加载渲染后的html

  log(u'开始调用selenium渲染html')

  selenium_html = get_selenium_js_html(wx_url)

  # Step 4: 检测目标网站是否进行了封锁

  if need_verify(selenium_html):

  log(u'爬虫被目标网站封锁,请稍后再试')

  else:

  # Step 5: 使用PyQuery,从Step 3获取的html中解析出公众号文章列表的数据

  log(u'调用selenium渲染html完成,开始解析公众号文章')

  articles = parse_wx_articles_by_html(selenium_html)

  log(u'抓取到微信文章%d篇' % len(articles))

  # Step 6: 把微信文章数据封装成字典的list

  log(u'开始整合微信文章数据为字典')

  微信公众号内容提取怎么做?小编已经为大家介绍了微信公众号内容怎么提取了,以上内容供有需要的朋友们参考哦,希望对您会有帮助。大家请多关注鱼爪创媒,感谢您的支持。

相关推荐:

微信公众号数据抓取怎么弄?公众号怎么抓取数据?

微信公众号怎么查询数据库?如何查询公众号数据库?

微信公众号数据怎么录入?微信公众号数据是什么?

鱼爪创媒是一家专业提供公众号交易、公众号迁移、公众号增粉、公众号买卖交易的平台,如果您有这方面的需求,欢迎电话咨询:13018202357。有任何疑问,可以 【立即咨询】 我们平台的客服或者添加微信号 【13018202357】 。此文章来源于网络,如有侵权,请联系删除

标签:

资金保障

提供买卖双方资金担保交易
更放心

法律保障

交易签订具有法律效益合同
提供法律支持

急速退款

专属资金通道,快速拿到
钱款

全资公司

全资控股公司,大平台交易
有保障

服务优质

3500+专业团队,为您提供24
小时一对一贴心服务