问题描述

利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地。

注意点

搜狗微信获取的地址为临时链接,具有时效性。

公众号为动态网页(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爬虫_微信公众号推送信息爬取的实例相关推荐

  1. python爬虫公众号_python爬虫_微信公众号推送信息爬取的实例

    问题描述 利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地. 注意点 搜狗微信获取的地址为临时链接,具有时效性. 公众号为动态网页(JavaScript渲染),使用request ...

  2. python微信公众号推送_python爬虫_微信公众号推送信息爬取的实例

    问题描述 利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地. 注意点 搜狗微信获取的地址为临时链接,具有时效性. 公众号为动态网页(JavaScript渲染),使用request ...

  3. python微信公众号爬虫_微信公众号推送信息爬取---python爬虫

    问题描述 利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地. 注意点 搜狗微信获取的地址为临时链接,具有时效性. 公众号为动态网页(JavaScript渲染),使用request ...

  4. python爬取微信公众号推送_微信公众号推送信息爬取---python爬虫

    问题描述 利用搜狗的微信搜索抓取指定公众号的最新一条推送,并保存相应的网页至本地. 注意点 搜狗微信获取的地址为临时链接,具有时效性. 公众号为动态网页(JavaScript渲染),使用request ...

  5. JAVA微信公众号推送信息

    package weixin.util;import java.io.Serializable; /* *AccessToken 对象 */ public class AccessToken impl ...

  6. 为何公众号推送会延迟发送_关于公众号推送延迟更新的说明

    关于公众号推送延迟更新的说明 亲爱的朋友: 我们是红星公众号自创立以来,得到了很多朋友们的支持,经常与我们互动,在这里非常感谢各位! 最近公众号更新出现了"不定时"的情况,相信您也 ...

  7. uniApp 微信小程序 授权 公众号推送信息

    准本工作 1.首先小程序  更公众号关联起来 2.配置相应的域名(也就是你请求后端接口的公共地址) 3.需要写一个h5 页面 用于跳板 公众号 的授权 公众号如何关联小程序? 打开微信公众号后台,选择 ...

  8. 微信小程序消息从公众号推送

    2020.06.05更新 新的一年认证续费只需要续费公众号. 小程序可以自动关联认证. 一定要记得!!!!!!! ------------------------------------------- ...

  9. 微信公众号推送模板消息工具类

    微信公众平台: 开通 模板消息功能 : 添加消息模板: 将模板id复制作为后台参数: 后台(java): 使用时直接调用WechatModelMessage.sendWechatmsgToUser() ...

最新文章

  1. 最强python技术前沿!什么是python怎么学?通过这篇文字就知道了
  2. lvs中dr模式配置脚本
  3. Service的线程、工作线程、权限及系统Service
  4. 优雅参数判空_java 方法参数怎么优雅校验?
  5. Swift 总结使用问号(?)和感叹号(!)-备用
  6. 输入流中的read和readfully方法区别和原理
  7. 第一节:别出心裁的HTML5简介
  8. 聊天机器人-ChatterBot初试
  9. delphi三方控件的安装方法
  10. Linux开发:error: ‘clockid_t’ has not been declared
  11. 做真正Hacker 的乐趣──自己动手去实践
  12. 硬件探索——模拟乘法器的综合应用设计实验
  13. Android JS交互-记录我所遇到的
  14. ArcGIS 10安装方法(对比流行的2种安装方法)||迅雷电驴下载地址
  15. 网易Airtest跨平台的UI自动化测试框架
  16. 虚拟机怎么安装软件 Mac虚拟机怎么安装软件
  17. 小偷和抢劫是被怎么遏制的?
  18. chromedriver.exe安装
  19. Java设计模式 Design Pattern:包装模式 Decorator Pattern
  20. 拼多多下单助手怎么一键采购、发货的?

热门文章

  1. 企业如何留住客户?精诚CRMPM给你答案
  2. 2022跨境出海:拉美电商市场现状及发展前景
  3. smtplib python_python邮件发送smtplib使用详解
  4. 一个很很很简单的移动端日历
  5. WEBshell与文件上传漏洞
  6. 边缘计算:挖掘大连接下的计算富矿 附:一张图看懂边缘计算
  7. 学习UE4动画蓝图:配置脚部IK
  8. 树莓派安装宝塔mysql_在树莓派中安装宝塔Linux面板
  9. 数据结构与算法(二十三)
  10. 计算机基础知识 - 比特、字节、KB、MB、...之间的关系