python微信爬取教程_python爬虫_微信公众号推送信息爬取的实例
问题描述
利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地。
注意点
搜狗微信获取的地址为临时链接,具有时效性。
公众号为动态网页(JavaScript渲染),使用requests.get()获取的内容是不含推送消息的,这里使用selenium+PhantomJS处理
代码
#! /usr/bin/env python3
from selenium import webdriver
from datetime import datetime
import bs4, requests
import os, time, sys
# 获取公众号链接
def getAccountURL(searchURL):
res = requests.get(searchURL)
res.raise_for_status()
soup = bs4.BeautifulSoup(res.text, "lxml")
# 选择第一个链接
account = soup.select('a[uigs="account_name_0"]')
return account[0]['href']
# 获取首篇文章的链接,如果有验证码返回None
def getArticleURL(accountURL):
browser = webdriver.PhantomJS("/Users/chasechoi/Downloads/phantomjs-2.1.1-macosx/bin/phantomjs")
# 进入公众号
browser.get(accountURL)
# 获取网页信息
html = browser.page_source
accountSoup = bs4.BeautifulSoup(html, "lxml")
time.sleep(1)
contents = accountSoup.find_all(hrefs=True)
try:
partitialLink = contents[0]['hrefs']
firstLink = base + partitialLink
except IndexError:
firstLink = None
print('CAPTCHA!')
return firstLink
# 创建文件夹存储html网页,以时间命名
def folderCreation():
path = os.path.join(os.getcwd(), datetime.now().strftime('%Y-%m-%d_%H-%M-%S'))
try:
os.makedirs(path)
except OSError as e:
if e.errno != errno.EEXIST:
raise
print("folder not exist!")
return path
# 将html页面写入本地
def writeToFile(path, account, title):
myfile = open("{}/{}_{}.html".format(path, account, title), 'wb')
myfile.write(res.content)
myfile.close()
base ='https://mp.weixin.qq.com'
accountList = ['央视新闻', '新浪新闻','凤凰新闻','羊城晚报']
query = 'http://weixin.sogou.com/weixin?type=1&s_from=input&query='
path = folderCreation()
for index, account in enumerate(accountList):
searchURL = query + account
accountURL = getAccountURL(searchURL)
time.sleep(10)
articleURL = getArticleURL(accountURL)
if articleURL != None:
print("#{}({}/{}): {}".format(account, index+1, len(accountList), accountURL))
# 读取第一篇文章内容
res = requests.get(articleURL)
res.raise_for_status()
detailPage = bs4.BeautifulSoup(res.text, "lxml")
title = detailPage.title.text
print("标题: {}\n链接: {}\n".format(title, articleURL))
writeToFile(path, account, title)
else:
print('{} files successfully written to {}'.format(index, path))
sys.exit()
print('{} files successfully written to {}'.format(len(accountList), path))
参考输出
Terminal输出
Finder
分析
链接获取
首先进入搜狗的微信搜索页面,在地址栏中提取需要的部分链接,字符串连接公众号名称,即可生成请求链接
针对静态网页,利用requests获取html文件,再用BeautifulSoup选择需要的内容
针对动态网页,利用selenium+PhantomJS获取html文件,再用BeautifulSoup选择需要的内容
遇到验证码(CAPTCHA),输出提示。此版本代码没有对验证码做实际处理,需要人为访问后,再跑程序,才能避开验证码。
文件写入
使用os.path.join()构造存储路径可以提高通用性。比如Windows路径分隔符使用back slash(\), 而OS X 和 Linux使用forward slash(/),通过该函数能根据平台进行自动转换。
open()使用b(binary mode)参数同样为了提高通用性(适应Windows)
使用datetime.now()获取当前时间进行命名,并通过strftime()格式化时间(函数名中的f代表format),
以上这篇python爬虫_微信公众号推送信息爬取的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持找一找教程网。
python微信爬取教程_python爬虫_微信公众号推送信息爬取的实例相关推荐
- python爬虫公众号_python爬虫_微信公众号推送信息爬取的实例
问题描述 利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地. 注意点 搜狗微信获取的地址为临时链接,具有时效性. 公众号为动态网页(JavaScript渲染),使用request ...
- python微信公众号推送_python爬虫_微信公众号推送信息爬取的实例
问题描述 利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地. 注意点 搜狗微信获取的地址为临时链接,具有时效性. 公众号为动态网页(JavaScript渲染),使用request ...
- python微信公众号爬虫_微信公众号推送信息爬取---python爬虫
问题描述 利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地. 注意点 搜狗微信获取的地址为临时链接,具有时效性. 公众号为动态网页(JavaScript渲染),使用request ...
- python爬取微信公众号推送_微信公众号推送信息爬取---python爬虫
问题描述 利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地. 注意点 搜狗微信获取的地址为临时链接,具有时效性. 公众号为动态网页(JavaScript渲染),使用request ...
- JAVA微信公众号推送信息
package weixin.util;import java.io.Serializable; /* *AccessToken 对象 */ public class AccessToken impl ...
- 为何公众号推送会延迟发送_关于公众号推送延迟更新的说明
关于公众号推送延迟更新的说明 亲爱的朋友: 我们是红星公众号自创立以来,得到了很多朋友们的支持,经常与我们互动,在这里非常感谢各位! 最近公众号更新出现了"不定时"的情况,相信您也 ...
- uniApp 微信小程序 授权 公众号推送信息
准本工作 1.首先小程序 更公众号关联起来 2.配置相应的域名(也就是你请求后端接口的公共地址) 3.需要写一个h5 页面 用于跳板 公众号 的授权 公众号如何关联小程序? 打开微信公众号后台,选择 ...
- 微信小程序消息从公众号推送
2020.06.05更新 新的一年认证续费只需要续费公众号. 小程序可以自动关联认证. 一定要记得!!!!!!! ------------------------------------------- ...
- 微信公众号推送模板消息工具类
微信公众平台: 开通 模板消息功能 : 添加消息模板: 将模板id复制作为后台参数: 后台(java): 使用时直接调用WechatModelMessage.sendWechatmsgToUser() ...
最新文章
- 最强python技术前沿!什么是python怎么学?通过这篇文字就知道了
- lvs中dr模式配置脚本
- Service的线程、工作线程、权限及系统Service
- 优雅参数判空_java 方法参数怎么优雅校验?
- Swift 总结使用问号(?)和感叹号(!)-备用
- 输入流中的read和readfully方法区别和原理
- 第一节:别出心裁的HTML5简介
- 聊天机器人-ChatterBot初试
- delphi三方控件的安装方法
- Linux开发:error: ‘clockid_t’ has not been declared
- 做真正Hacker 的乐趣──自己动手去实践
- 硬件探索——模拟乘法器的综合应用设计实验
- Android JS交互-记录我所遇到的
- ArcGIS 10安装方法(对比流行的2种安装方法)||迅雷电驴下载地址
- 网易Airtest跨平台的UI自动化测试框架
- 虚拟机怎么安装软件 Mac虚拟机怎么安装软件
- 小偷和抢劫是被怎么遏制的?
- chromedriver.exe安装
- Java设计模式 Design Pattern:包装模式 Decorator Pattern
- 拼多多下单助手怎么一键采购、发货的?