微信公众号信息的爬取

1.Selenium库来获取源码

打开搜狗微信,在搜索框中输入“南中医青年”,这里就搜索到了南中医青年发布的公众号文章结果

但是在浏览器中复制浏览器地址后再度输入,界面会在“搜索公众号界面”,而非“搜索文章”界面,因此我利用Selenium库模拟输入“南中医青年”,点击“搜索公众号文章”来获得目标内容。

    browser = webdriver.Chrome()browser.get('https://weixin.sogou.com/weixin?query=南中医药院学子') # 访问南中医药院学子的官方公众号browser.find_element(By.XPATH, '//*[@id="query"]').clear() # 清除搜索框中原有的内容browser.find_element(By.XPATH, '//*[@id="query"]').send_keys('南中医药院学子') # 向搜索框中输入“南中医药院学子”browser.find_element(By.XPATH, '//*[@id="scroll-header"]/form/div/input[1]').click() # 点击搜索文章公众号

然后再获得网页源码,这边有一个坑,在利用Selenium库获得源码的过程中,需要使用time.sleep来让程序暂停一段时间,可以理解成加载网页,我设置成了3s,大家可以根据自己的网速以及电脑流畅度等设置时间,

2.分析求得对应文章的网址

习惯性按F【12】打开浏览器的开发者工具,利用选择工具点击列表中的文章标题定位对应源码位置

网页源码中对应的信息大略如下,href后的数据就是对应的网址信息。但是要注意这边不太完整,需要在最前面加上“https://mp.weixin.sougou.com/”,把鼠标放在上面就可以看到完整版的网址信息,并且为了方便,我把整个浏览器隐藏掉了。

这里还需要分页输出,我们定位到链接地址后观察发现它的规律是“字符串page + 页数 + 字符串”,所以我利用字符串的拼接来得到这个地址关系:

    for i in range(10):chrome_options = webdriver.ChromeOptions()chrome_options.add_argument('--headless')browser = webdriver.Chrome(options=chrome_options)shared_url = 'https://weixin.sogou.com/weixin?query=南中医药院学子&_sug_type_=&sut=3242&lkt=1%2C1644729398114%2C1644729398114&s_from=input&_sug_=n&type=2&sst0=1644729398216&page=' + str(i + 1) + '&ie=utf8&w=01019900&dr=1'browser.get(shared_url) # 获取公众号文章界面的源码data = browser.page_sourceanalysis(data)

我利用的是select函数,观察可知我们希望的链接内容在class为“txt-box”分区下的a标签中,获得链接之后利用append()函数存放在全局变量article_url列表中。

def analysis(res):global article_urlsoup = BeautifulSoup(res, 'html.parser')temp_url = soup.select('.txt-box a') # 观察源码中每篇文章网址在class为txt-box下,a标签for i in range(len(temp_url)):temp = ('https://weixin.sogou.com/' + str(temp_url[i]['href'])) # 在链接前补充我们需要的网址前缀article_url.append(temp)

3.对标题时间的清洗和输出

首先输入我们获得的链接地址尝试后发现,在每篇文章后还会出现一次公众号的地址,因此只有在列表中的奇数项才是我们需要的文章地址

article_url = article_url[0::2] # 我发现每篇文章都会读取公众号的地址,因此提取奇数项

源代码以及存在的问题

源码

import requests
import time
import re
from bs4 import BeautifulSoup
from selenium import webdriver
from selenium.webdriver.common.by import By
from lxml import htmldef getcon():global article_urlbrowser = webdriver.Chrome()browser.get('https://weixin.sogou.com/weixin?query=南中医药院学子') # 访问南中医药院学子的官方公众号browser.find_element(By.XPATH, '//*[@id="query"]').clear() # 清除搜索框中原有的内容browser.find_element(By.XPATH, '//*[@id="query"]').send_keys('南中医药院学子') # 向搜索框中输入“南中医药院学子”browser.find_element(By.XPATH, '//*[@id="scroll-header"]/form/div/input[1]').click() # 点击搜索文章公众号time.sleep(3)for i in range(10):chrome_options = webdriver.ChromeOptions()chrome_options.add_argument('--headless')browser = webdriver.Chrome(options=chrome_options)shared_url = 'https://weixin.sogou.com/weixin?query=南中医药院学子&_sug_type_=&sut=3242&lkt=1%2C1644729398114%2C1644729398114&s_from=input&_sug_=n&type=2&sst0=1644729398216&page=' + str(i + 1) + '&ie=utf8&w=01019900&dr=1'browser.get(shared_url) # 获取公众号文章界面的源码data = browser.page_sourceanalysis(data)article_url = article_url[0::2]  # 我发现每篇文章都会读取公众号的地址,因此提取奇数项print(article_url)def analysis(res):global article_urlsoup = BeautifulSoup(res, 'html.parser')temp_url = soup.select('.txt-box a') # 观察源码中每篇文章网址在class为txt-box下,a标签for i in range(len(temp_url)):temp = ('https://weixin.sogou.com/' + str(temp_url[i]['href'])) # 在链接前补充我们需要的网址前缀article_url.append(temp)if __name__ == "__main__":global article_url # 定义一个存放每篇文章网址的全局变量article_url = []getcon()

1.标签外文字的爬取

一个是后续的跟进,我对没有特定标签指明的文字,也就是标签外饿的文字爬取仍然不熟练,在xpath外最多的还是用正则表达式进行爬取。

2.获取cookie模拟登录

这是利用Selenium库模拟打开浏览器,然后模拟点击登录按钮,在time.sleep()后扫码登录界面,这样就可以通过未登录时只能看10个界面的限制,但是我在模拟点开时遇到了一些问题,模拟点击没有效果,后续如果想要爬取这10页以外的内容就需要登录,所以后续也需要发文章讲一下对这些按钮的点击过程中常见的一些问题。

cookie可以理解为输入账号密码过后,无论如何切换界面,做什么操作都会被记录其中,在下篇文章中改进登录操作。

3.验证码的识别与输入

在我的首次输入时可以正常读取界面,但是当爬取频率过高就会被识别,需要用验证码

我在查阅后了解到“超级鹰”软件可以相应地进行识别,后面更新。

【爬虫】【python】微信公众号信息的爬取(以南中医青年为例)相关推荐

  1. Python 微信公众号的文章爬取

    Python 微信公众号文章爬取 一.思路 二.接口分析 三.实现 第一步: 第二步: 1.请求获取对应公众号接口,取到我们需要的fakeid 2.请求获取微信公众号文章接口,取到我们需要的文章数据 ...

  2. python实现微信hook_GitHub - gemgin/wechathook: 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取...

    wechathook 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取 注入器 注入dll进程序中 DLL 实现hook功能,申请内存,修改call,在里 ...

  3. python实现微信hook_GitHub - redtips/wechathook: 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取...

    wechathook 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取 注入器 注入dll进程序中 DLL 实现hook功能,申请内存,修改call,在里 ...

  4. python实现微信hook_GitHub - zhouxionger/wechathook: 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取...

    wechathook 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取 注入器 注入dll进程序中 DLL 实现hook功能,申请内存,修改call,在里 ...

  5. python hook微信_GitHub - 15993248973/wechathook: 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取...

    wechathook 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取 注入器 注入dll进程序中 DLL 实现hook功能,申请内存,修改call,在里 ...

  6. hook微信 python_GitHub - zkqiang/wechathook: 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取...

    wechathook 借助微信hook,拦截修改某些call,填充进我们的Python代码,进行微信公众号文章的爬取 注入器 注入dll进程序中 DLL 实现hook功能,申请内存,修改call,在里 ...

  7. 微信公众号文章采集 爬取微信文章 采集公众号的阅读数和点赞数?

    获取微信key工具:fiddler2+phpstudy 本文介绍的是获取的是公众号key,不是万能微信key.不过思路类似. 我已经找了微信万能key的方法,不过是万万不能说的,嘿嘿 phpstudy ...

  8. Python 爬虫之微信公众号

    Python 爬虫之微信公众号 源代码放在文末. 本次爬虫需要的工具如下: selenium 驱动器 对应浏览器的 webdriver 一个微信订阅号 在 2017 年 6 月左右,微信官方发布一篇文 ...

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

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

最新文章

  1. 10-TypeScript中的接口
  2. python断点调试不起作用flask_关于python的flask框架下的调试
  3. Java8 ConcurrentHashMap详解
  4. Red hat下使用automake自动配置wxWidgets的makefile
  5. 详解C调用lua脚本效率测试
  6. PL\SQL 打开时出现动态执行表不可访问,本会话的自动统计被禁止
  7. collector list 多个分组_【S01E07】groupby方法、GroupBy对象、groupby方法的分组键
  8. html音频自动播放隐藏控制器,HTML5 音频回放/播放控制器
  9. 机器学习相关速查表Cheat Sheet
  10. 《刀塔传奇》付费设计分析
  11. vj p1041神风堂人数 题解
  12. MATLAB求函数零点—fzero函数
  13. float 精度探究
  14. 盘点MES系统物料管理那些事儿
  15. struct 和 typedef struct 的区别
  16. Jenkins构建时间变量
  17. 使用CXF遇到的错误
  18. Zigbee efr32 有线网关接入HASS中的ZHA,实现设备控制
  19. 预约挂号医院管理项目----service_hosp模块—医院管理
  20. windows 上使用mongrel

热门文章

  1. python物流数据集
  2. 初始化器 java_来说说Java中的实例初始化器
  3. Plsql 注册解决办法
  4. 电脑开始菜单计算机基础知识,计算机基础知识:计算机中的开始菜单
  5. 彻底弄懂类加载和JVM的双亲委派机制
  6. 最短路计数「负权值」
  7. 1、《创建您自己的NFT集合并发布一个Web3应用程序来展示它们》什么是NFT
  8. 苹果手机iCloud钥匙串的加密缺陷
  9. 2.SOA面向服务架构
  10. OPPO手机删除文件数据恢复技巧篇