侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python采集微信公众号文章

Python  /  管理员 发布于 7年前   245

本文实例为大家分享了python采集微信公众号文章的具体代码,供大家参考,具体内容如下

在python一个子目录里存2个文件,分别是:采集公众号文章.py和config.py。 代码如下:

1.采集公众号文章.py

from urllib.parse import urlencodeimport pymongoimport requestsfrom lxml.etree import XMLSyntaxErrorfrom requests.exceptions import ConnectionErrorfrom pyquery import PyQuery as pqfrom config import * #配置MongoDBclient = pymongo.MongoClient(MONGO_URI)db = client[MONGO_DB] base_url = 'http://weixin.sogou.com/weixin?'#添加头文件headers = {  'Cookie': 'usid=S-pkM6vW_ac4ktr1; SUV=00A75E9078EFD9F75A6573ECAD0EC883; wuid=AAGCxerSHQAAAAqRGn4SoAgAAAA=; IPLOC=CN4414; SUID=767BEAB73220910A000000005AA9E2AA; pgv_pvi=159197184; pgv_si=s8252565504; ABTEST=0|1521083055|v1; weixinIndexVisited=1; sct=1; JSESSIONID=aaalXqKRP6JjS8ac4Hwhw; ppinf=5|1521083238|1522292838|dHJ1c3Q6MToxfGNsaWVudGlkOjQ6MjAxN3x1bmlxbmFtZTo2OiUzQSUyOXxjcnQ6MTA6MTUyMTA4MzIzOHxyZWZuaWNrOjY6JTNBJTI5fHVzZXJpZDo0NDpvOXQybHVOaExNcS1vLW1zbjMxMmNMSkp4OGpZQHdlaXhpbi5zb2h1LmNvbXw; pprdig=tbVf7qLZdDMjpCn4jTf3dg8C8NeRX-YgDi8KUcezn0rteWuhkgU4xMNaxZbakVQuswboIGl_rD-34abU6VY9Jkv7me3BypigyDnIv2lJUchGCo7Gk58m9Qhrm3Aa7NHLHjFVYoaQkQgBSYKpatxMNPe3Tm57ZDlzdPg_8mBmBNQ; sgid=23-30671195-AVqp42ZctqiaCybbDvvfWno4; PHPSESSID=4jjk2a9rv6kq7m50f42r92u3r3; SUIR=D2DF4E12A5A1C3CE1A8AD7F2A5FE18FE; ppmdig=1521087492000000855f9824f94abe82b25d2839135ad3a8; SNUID=FEF36D3F8882EFEC4FCF61E68801DA49; seccodeRight=success; successCount=1|Thu, 15 Mar 2018 04:23:23 GMT',  'Host': 'weixin.sogou.com',  'Referer': 'http://weixin.sogou.com/antispider/?from=%2fweixin%3Fquery%3d%E9%A3%8E%E6%99%AF%26type%3d2%26page%3d95%26ie%3dutf8',  'Upgrade-Insecure-Requests': '1',  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36'}#初始化代理为本地IPproxy = None #定义获取代理函数def get_proxy():  try:    response = requests.get(PROXY_POOL_URL)    if response.status_code == 200:      return response.text    return None  except ConnectionError:    return None #添加代理获取网页内容def get_html(url, count=1):  print('Crawling', url)  print('Trying Count', count)  global proxy  if count >= MAX_COUNT:    print('Tried Too Many Counts')    return None  try:    if proxy:      proxies = {        'http': 'http://' + proxy      }      response = requests.get(url, allow_redirects=False, headers=headers, proxies=proxies)    else:      response = requests.get(url, allow_redirects=False, headers=headers)    if response.status_code == 200:      return response.text    if response.status_code == 302:      # Need Proxy      print('302')      proxy = get_proxy()      if proxy:        print('Using Proxy', proxy)        return get_html(url)      else:        print('Get Proxy Failed')        return None  except ConnectionError as e:    print('Error Occurred', e.args)    proxy = get_proxy()    count += 1    return get_html(url, count)  #获取索引页内容def get_index(keyword, page):  data = {    'query': keyword,    'type': 2,    'page': page  }  queries = urlencode(data)  url = base_url + queries  html = get_html(url)  return html #解析索引页,提取详情页网址def parse_index(html):  doc = pq(html)  items = doc('.news-box .news-list li .txt-box h3 a').items()  for item in items:    yield item.attr('href') #获取详情页def get_detail(url):  try:    response = requests.get(url)    if response.status_code == 200:      return response.text    return None  except ConnectionError:    return None #解析索引页,返回微信文章标题、内容、日期、公众号名称等def parse_detail(html):  try:    doc = pq(html)    title = doc('.rich_media_title').text()    content = doc('.rich_media_content').text()    date = doc('#post-date').text()    nickname = doc('#js_profile_qrcode > div > strong').text()    wechat = doc('#js_profile_qrcode > div > p:nth-child(3) > span').text()    return {      'title': title,      'content': content,      'date': date,      'nickname': nickname,      'wechat': wechat    }  except XMLSyntaxError:    return None #存储到MongoDB,去重操作def save_to_mongo(data):  if db['articles'].update({'title': data['title']}, {'$set': data}, True):    print('Saved to Mongo', data['title'])  else:    print('Saved to Mongo Failed', data['title']) #主函数def main():  for page in range(1, 101):    html = get_index(KEYWORD, page)    if html:      article_urls = parse_index(html)      for article_url in article_urls:        article_html = get_detail(article_url)        if article_html:          article_data = parse_detail(article_html)          print(article_data)  if __name__ == '__main__':  main()

2.config.py代码:

#爬取公众号文章PROXY_POOL_URL = 'http://127.0.0.1:5000/get'KEYWORD ='计算机等级二级'   # 输入关键词MONGO_URI = 'localhost' MONGO_DB = 'data'MAX_COUNT = 5

其中,config.py中KEYWORD为查找关键词,可以根据需要更改。经实测,运行"采集公众号文章.py"成功!若因受限不成功,可多运行几次。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


  • 上一条:
    python爬取指定微信公众号文章
    下一条:
    python爬虫之urllib,伪装,超时设置,异常处理的方法
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(0个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客