参照资料:selenium webdriver添加cookie: https://www.jb51.net/article/193102.html
需求:
想阅读微信公众号历史文章,但是每次找回看得地方不方便。
思路:
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,可以发现,文章到最底部的判断是。
<div class="loadmore with_line" style="display: none;" id="js_nomore"> <div class="tips_wrp"> <span class="tips js_no_more_msg" style="display: none;">已无更多</span> <span class="tips js_need_add_contact" style="display: none;">关注公众帐号,接收更多消息</span> </div> </div>
使用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处在<div msgid="1000000026">中。
<div class="weui_msg_card js_card" msgid="1000000026"> <div class="weui_msg_card_hd">2017年1月13日</div> <div class="weui_msg_card_bd"> <!-- 图文 --> <!-- 普通图文 --> <div id="WXAPPMSG1000000026" class="weui_media_box appmsg js_appmsg" hrefs="http://mp.weixin.qq.com/s" data-t="0"> <span class="weui_media_hd js_media" style="background-image:url(http://mmbiz.qpic.cn/mmbiz_jpg/XibhQ5tjv6dG9B4GF1C9MGBJO5AR2wvjCL9LgdcFgAdEgyU8wZFuDXoH9O9dNvafwK3RibCjUyiarIlUDlkxbcyfQ/640" data-s="640" hrefs="http://mp.weixin.qq.com/s" data-type="APPMSG"> </span> <div class="weui_media_bd js_media" data-type="APPMSG"> <h4 class="weui_media_title" hrefs="http://mp.weixin.qq.com/s"> 承认自己是难民有什么错 </h4> <p class="weui_media_desc">枷锁已经足够沉重,谢绝道德绑架</p> <p class="weui_media_extra_info">2017年1月13日</p> </div> </div> </div> </div>
文章类型主要分为,
<div class="weui_media_bd js_media" data-type="APPMSG">
<div class="weui_media_bd js_media" data-type="TEXT">
有无原创进行划分。
最终实现:
%%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保存,即可得到。组建成菜单形式的文章,可参考
记一次 excel vba 参考手册爬虫实战,不必要的一次爬虫。:htthttps://www.jb51.net/article/193107.htm
遇到的坑:
1、find_element_by_xpath 需要配上 NoSuchElementException 使用,否则遇到未找到的节点就会出错,最初find_elements_by_xpath 来防止找不到相关节点,结果发现,执行速度异常的慢,需要查找原因。
2、cookies使用的时候是人为获取,如果太长时间不用,需要重新获取。可以考虑结合pyautogui来控制weixin客户端来进行获取。?
3、构建的时候,最后分布试行,最初的文章类型没有做好判断,结果执行时间很久。做好异常捕获,再逐步分析错误的节点问题。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
RTX 5090要首发 性能要翻倍!三星展示GDDR7显存
三星在GTC上展示了专为下一代游戏GPU设计的GDDR7内存。
首次推出的GDDR7内存模块密度为16GB,每个模块容量为2GB。其速度预设为32 Gbps(PAM3),但也可以降至28 Gbps,以提高产量和初始阶段的整体性能和成本效益。
据三星表示,GDDR7内存的能效将提高20%,同时工作电压仅为1.1V,低于标准的1.2V。通过采用更新的封装材料和优化的电路设计,使得在高速运行时的发热量降低,GDDR7的热阻比GDDR6降低了70%。
更新日志
- 《暗喻幻想》顺风耳作用介绍
- 崔健1985-梦中的倾诉[再版][WAV+CUE]
- 黄子馨《追星Xin的恋人们2》HQ头版限量编号[WAV+CUE]
- 孟庭苇《情人的眼泪》开盘母带[低速原抓WAV+CUE]
- 孙露《谁为我停留HQCD》[低速原抓WAV+CUE][1.1G]
- 孙悦《时光音乐会》纯银CD[低速原抓WAV+CUE][1.1G]
- 任然《渐晚》[FLAC/分轨][72.32MB]
- 英雄联盟新英雄安蓓萨上线了吗 新英雄安蓓萨技能介绍
- 魔兽世界奥杜尔竞速赛什么时候开启 奥杜尔竞速赛开启时间介绍
- 无畏契约CGRS准星代码多少 CGRS准星代码分享一览
- 张靓颖.2012-倾听【少城时代】【WAV+CUE】
- 游鸿明.1999-五月的雪【大宇国际】【WAV+CUE】
- 曹方.2005-遇见我【钛友文化】【WAV+CUE】
- Unity6引擎上线:稳定性提升、CPU性能最高提升4倍
- 人皇Sky今日举行婚礼!电竞传奇步入新篇章