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

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

1.采集公众号文章.py

from urllib.parse import urlencode

import pymongo

import requests

from lxml.etree import XMLSyntaxError

from requests.exceptions import ConnectionError

from pyquery import PyQuery as pq

from config import *

#配置MongoDB

client = 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'

}

#初始化代理为本地IP

proxy = 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采集微信公众号文章相关推荐

  1. python下载微信公众号文章_python selenium 微信公众号历史文章随手一点就返回首页?郁闷之下只好将他们都下载下来。...

    需求: 想阅读微信公众号历史文章,但是每次找回看得地方不方便. 思路: 1.使用selenium打开微信公众号历史文章,并滚动刷新到最底部,获取到所有历史文章urls. 2.对urls进行遍历访问,并 ...

  2. python爬取公众号历史文章_python爬微信公众号前10篇历史文章(6)-话说http cookies...

    早期Web开发面临的最大问题之一是如何管理状态.简言之,服务器端没有办法知道两个请求是否来自于同一个浏览器.这是cookies的起源. 什么是cookie? A cookie is a small s ...

  3. python爬微信公众号视频_python爬虫微信公众号视频

    import time import json import random import csv from selenium import webdriver from lxml import htm ...

  4. python 公众号菜单_Python脚本--微信公众号自定义菜单的创建及获取

    #-*- coding: utf-8 -* importtkMessageBoximporturllib2importjsonimportsys reload(sys) sys.setdefaulte ...

  5. 2020年7月最新,火车头批量采集微信公众号最近文章(包括实时更新)的方法及思路

    火车头采集微信公众号,这是许多网站建设的小伙伴都想要的功能.这篇内容是我在2020年4月份写的,但今天到7月了,完全没有问题.费话不多说,直接上干货. 先说说我的需求: 抓取一批公众号,大概10个.监 ...

  6. 爬虫实战教程:采集微信公众号文章

    一.场景简介 1.场景描述:通过搜狗采集微信公众号的文章 2.入口网址:https://weixin.sogou.com/weixin?type=1&s_from=input&quer ...

  7. 采集微信公众号文章只需几步(非搜狗微信)

    我们先去下载采集微信文章软件或者百度"小蜜蜂公众号文章助手"下载最新版 第一步:打开软件 第二步:登录微信电脑版 点击"公众号" 选择要采集的公众号 点击右上角 ...

  8. 获取、采集 微信公众号文章点赞阅读数量,实时获取点赞阅读

    讲解客户端如何进行采集.首先我们看一下微信文章的永久链接的格式 :https://mp.weixin.qq.com/s?__biz=MzAwMDE0OTU5Nw==&mid=265748275 ...

  9. python微信公众号翻译功能怎么用_使用python一步一步搭建微信公众平台(二)----搭建一个中英互译的翻译工具...

    距离上次写使用python一步一步搭建微信公众平台(一)已经有几个月了,当中自已也搭建了一个中英文互译的小应用,可是由于英文翻中文好弄,中文翻译成英文一直有问题,知道是编码的问题,但是一直搞不定,于是 ...

最新文章

  1. 在SQL Server 2000 和SQL Server 2005中导出表结构
  2. 原来音色是波峰到波谷时间序列
  3. win10 无法安装/启用 .net framework 3.5 的一种解决方案
  4. 论项目团队情商与项目团队绩效(转)
  5. 微信小程序 - 实现购物车结算
  6. JQuery validate 各项验证规则讲解
  7. redmine只是管理插件redmine_knowledgebase升级到0.4.0
  8. PHP 正则表达式资料
  9. Activemq判断队列存活脚本(一)
  10. Hbase二级索引入门
  11. cibersortx怎么用_Xbox series x加速器怎么用 Xbox series x加速器的使用教程
  12. OpenSolaris系列文章之----投影仪设置
  13. 判断质数的所有方法详解(C语言)
  14. 有量纲和无量纲是什么意思_为什么无线通信需要同步?
  15. 动易2006CMSSP3+动网论坛 DVBBS 7.1 SP1+Oblog 3.13绿色整合版
  16. 香港风景线 Byond 1993年采访
  17. 叶俊:让能量爆棚的秘诀
  18. npm出现UNMET DEPENDENCY的一种情况
  19. 抬杠APP获Donews“年度最佳运营创意”大奖,跨界营销引瞩目
  20. 英文字典app android,学生英语词典app

热门文章

  1. 苹果手写笔平替哪个品牌好?苹果平替手写笔排行
  2. python游戏脚本 魔兽世界_python魔兽世界开发脚本漫画作
  3. 关于Linux中网卡Teamd(分流容灾)的一些笔记
  4. linux压缩软连接丢失,linux 压缩软连接引起的问题
  5. 颇为冻人的逗笑冷幽默
  6. Windows7服务优化教程
  7. HTTP/3: 实用部署选项(第3部分)
  8. PG数据库对象及常用的操作命令
  9. 邯郸能否成为区域旅游协作团队的核心
  10. 微信公众号 开发详解01【目的、起名、准备工作、注册流程、后台功能】