需求:

想阅读微信公众号历史文章,但是每次找回看得地方不方便。

思路:

1、使用selenium打开微信公众号历史文章,并滚动刷新到最底部,获取到所有历史文章urls。

2、对urls进行遍历访问,并进行下载到本地。

实现

1、打开微信客户端,点击某个微信公众号->进入公众号->打开历史文章链接(使用浏览器打开),并通过开发者工具获取到cookies,保存为excel。

2、启动webdriver,并添加相应cookies。

browser = webdriver.Chrome()

wait = WebDriverWait(browser,10)

# 随便访问一个地址,然后才能设置cookies

browser.get('https://httpbin.org/get')

# 添加cookies,df为保存的excel cookies

for i in range(len(df)):

cookie_dict = {

"domain": df.loc[i,'DomaiN'],

'name': df.loc[i,'Name'],

'value': str(df.loc[i,'Value']),

"expires": df.loc[i,"Expires/Max-Age"],

'path': '/',}

browser.add_cookie(cookie_dict)

browser.get(weixin_url)

3、控制浏览器下移动

观察page_source,可以发现,文章到最底部的判断是。

已无更多

关注公众帐号,接收更多消息

使用driver控制JS。

%%time

# 通过判断已无更多的style,来判断是否到最底部,最终执行到最底部

no_more_msg_style = 'display: none;'

while True:

wait.until(EC.presence_of_element_located((By.XPATH,'//span[@class="tips js_no_more_msg" and text()="已无更多"]')))

no_more= browser.find_element_by_xpath('//span[@class="tips js_no_more_msg" and text()="已无更多"]')

now_style = no_more.get_attribute('style')

if str(now_style).find(no_more_msg_style) == -1:

# 说明已经加载完了

break

else:

# 停顿一会,等待浏览器加载

time.sleep(5)

# 通过JS,执行到最底部

browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')

4、关键信息获取。

根据html,分析得出文章url处在

中。

2017年1月13日

承认自己是难民有什么错

枷锁已经足够沉重,谢绝道德绑架

2017年1月13日

文章类型主要分为,

有无原创进行划分。

最终实现:

%%time

result = []

errlist = []

# 先得到其中一个

el_divs = browser.find_elements_by_xpath('//div[@class="weui_msg_card_list"]/div[@class="weui_msg_card js_card"]')

i = 0

for div in el_divs:

date = title = url = yuanchuang = ''

try:

date = div.find_element_by_xpath('.//div[@class="weui_msg_card_hd"]').get_attribute('innerHTML')

el_content = div.find_element_by_xpath('.//div[@class="weui_media_bd js_media"]')

if el_content.get_attribute('data-type') == 'APPMSG':

el = el_content.find_element_by_xpath('./h4[@class="weui_media_title"]')

title = el.text

url = el.get_attribute('hrefs')

xb = el_content.find_element_by_xpath('./p[@class="weui_media_extra_info"]').text

yuanchuang = '原创' if xb.find('原创') != -1 else ''

elif el_content.get_attribute('data-type') == 'TEXT':

title = '随文'

url = el_content.find_element_by_xpath('./div').text

yuanchuang = '原创'

else:

# 其他未能识别的类型

errlist.append([i,div.get_attribute('innerHTML')])

except NoSuchElementException:

errlist.append([i,div.get_attribute('innerHTML')])

print(str(i),':',date,title,url,yuanchuang)

result.append([date,title,yuanchuang,url])

i = i + 1

5、将得到url保存到excel

dfout = pd.DataFrame(result, columns=['日期', '标题', '原创', '地址'])

with pd.ExcelWriter(savename) as writer:

dfout.to_excel(writer,index=False,sheet_name = 'Sheet1')

最终保存形式

6、在遍历最后的链接地址,逐个requets保存,即可得到。组建成菜单形式的文章,可参考

遇到的坑:

1、find_element_by_xpath 需要配上 NoSuchElementException 使用,否则遇到未找到的节点就会出错,最初find_elements_by_xpath 来防止找不到相关节点,结果发现,执行速度异常的慢,需要查找原因。

2、cookies使用的时候是人为获取,如果太长时间不用,需要重新获取。可以考虑结合pyautogui来控制weixin客户端来进行获取。?

3、构建的时候,最后分布试行,最初的文章类型没有做好判断,结果执行时间很久。做好异常捕获,再逐步分析错误的节点问题。

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

联系邮箱:257853#qq.com(#->@) Powered By python博客 鲁ICP备18013710号

python博客 - 小白学python最友好的网站!

扫一扫,关注微信公众号

python爬虫爬取公众号_Python selenium爬取微信公众号文章代码详解相关推荐

  1. python爬虫动态加载页面_Python+Selenium爬取动态加载页面(2)

    注: 上一篇<Python+Selenium爬取动态加载页面(1)>讲了基本地如何获取动态页面的数据,这里再讲一个稍微复杂一点的数据获取全国水雨情网.数据的获取过程跟人手动获取过程类似,所 ...

  2. Python爬虫:最牛逼的 selenium爬取方式!

    Python爬虫:最牛逼的 selenium爬取方式! 作为一个男人 在最高光的时刻 这是小编准备的python爬虫学习资料,加群:700341555即可免费获取! Python爬虫:最牛逼的 sel ...

  3. python椭圆代码_Python实现霍夫圆和椭圆变换代码详解

    这篇文章主要介绍了Python实现霍夫圆和椭圆变换代码详解,具有一定借鉴价值,需要的朋友可以参考下 在极坐标中,圆的表示方式为: x=x0 rcosθ y=y0 rsinθ 圆心为(x0,y0),r为 ...

  4. python爬取论文代码_Python selenium爬取微信公众号文章代码详解

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

  5. python爬取酒店信息_python selenium爬取去哪儿网的酒店信息(详细步骤及代码实现)...

    准备工作 1.pip install selenium 2.配置浏览器驱动.配置其环境变量 Selenium3.x调用浏览器必须有一个webdriver驱动文件 Chrome驱动文件下载chromed ...

  6. python爬取付费漫画_python selenium爬取kuku漫画

    在爬取这个网站之前,试过爬取其他网站的漫画,但是发现有很多反爬虫的限制,有的图片后面加了动态参数,每秒都会更新,所以前一秒爬取的图片链接到一下秒就会失效了,还有的是图片地址不变,但是访问次数频繁的话会 ...

  7. python post方法登录微信公众号_python实现简单的微信公众号后台编写

    利用python的werobot库实现对微信公众号后台的开发: 实现的简单功能: 1.订阅后的回复 2.机器人聊天回复 3.指定关键字回复音乐,文字,链接 3.图片返回原图 注意点: 1.该后台基于微 ...

  8. python正则表达式提取数字比较好_python正则表达式从字符串中提取数字的思路详解...

    python从字符串中提取数字 使用正则表达式,用法如下: ## 总结 ## ^ 匹配字符串的开始. ## $ 匹配字符串的结尾. ## \b 匹配一个单词的边界. ## \d 匹配任意数字. ## ...

  9. time库是python中处理时间的标准库_python语言time库和datetime库基本使用详解

    今天是边复习边创作博客的第三天,我今年大二,我们专业开的有这门课程,因为喜欢所以更加认真学习,本以为没人看呢,看了后台浏览量让我更加认真创作,这篇博客花了2个半小时的时间,结合自己所学,所思,所想写作 ...

最新文章

  1. pyinstaller安装以及生成exe文件
  2. ASP.NET 2.0中CSS失效解决方案
  3. 实验三——for 语句及分支结构else-if
  4. VTK:Filtering之LandmarkTransform
  5. python 霍夫直线变换_OpenCV-Python 霍夫线变换 | 三十二
  6. 2021-11-05深度学习
  7. 目前市场上的电脑一体机从计算机种类,电脑一体机发展方向是什么?
  8. [iOS]swift版内购
  9. spark任务shell运行_Spark原理与实战(七)部署模式与运行机制
  10. ZDI 公布2020年 Pwn2Own 东京赛规则和奖金
  11. java.lang.OutOfMemoryError: GC overhead limit exceeded 问题分析和解决(转)
  12. 九大类背包问题专题1---01背包问题(二维和优化一维法附代码)
  13. 西游记与面向对象编程
  14. Ajax学习笔记-get请求参数-4
  15. html 如何遍历json,Jquery, JS遍历JSON数组 - HTML5
  16. dw添加下拉菜单_怎样用dreamweaver制作网站下拉菜单
  17. xp系统计算机蓝屏,xp蓝屏,教您教你怎么修复xp蓝屏问题
  18. 将openwrt软路由装进U盘中并运行
  19. ES6中展开运算符的深拷贝浅拷贝理解(ElementUI表格点击编辑,模态框内容与表格数据一起变的问题)
  20. 机器学习面试题之逻辑回归(二)

热门文章

  1. python 蒙特卡罗法求π值
  2. 20.古体诗的平仄与三字脚
  3. 算法分析与设计实验报告——实现汽车加油问题
  4. 基于恩智浦MK60DN512Z系列单片机的智能模型车主程序与子程序集
  5. redis的几种常见客户端
  6. A003-182-2268-黄清梅
  7. 2020_ACL_A Transformer-based joint-encoding for Emotion Recognition and Sentiment Analysis
  8. 旅行好帮手:精准可靠的航班动态数据服务
  9. 戴尔d系列服务器,戴尔科技集团推出两款全新VxRail产品
  10. 查找代码文件中的非 ASCII 字符