介绍
这篇文章主要介绍Python中硒爬取微信公众号文章的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
需求:
想阅读微信公众号历史文章,但是每次找回看得地方不方便。
思路:
1,使用硒打开微信公众号历史文章,并滚动刷新到最底部,获取到所有历史文章url。
2,对url进行遍历访问,并进行下载到本地。
实现
1,打开微信客户端,点击某个微信公众号→进入公众号→打开历史文章链接(使用浏览器打开),并通过开发者工具获取到饼干,保存为excel。
2,启动webdriver,并添加相应的饼干。
浏览器=webdriver.Chrome () 等待=WebDriverWait(浏览器,10) #随便访问一个地址,然后才能设置的饼干 browser.get (& # 39; https://httpbin.org/get& # 39;) #添加饼干,df为保存的excel饼干 因为我在范围(len (df)): cookie_dict={ “domain": df.loc[我& # 39;域# 39;], & # 39;名字# 39;:df.loc[& # 39;我的名字# 39;], & # 39;价值# 39;:str (df.loc[我& # 39;价值# 39;]), “expires": df.loc(我,“到期/Max-Age"), & # 39;path & # 39;: & # 39;/& # 39;} browser.add_cookie (cookie_dict) browser.get (weixin_url)
3,控制浏览器下移动
观察page_source,可以发现,文章到最底部的判断是。
& lt; div类=發oadmore with_line"id=癹s_nomore"比; & lt; div类=皌ips_wrp"祝辞 & lt;跨类=疤崾緅s_no_more_msg"在已无更多& lt;/span> & lt;跨类=疤崾緅s_need_add_contact"在关注公众帐号,接收更多消息& lt;/span> & lt;/div> & lt;/div>
使用司机控制JS。
% % #通过判断已无更多的风格,来判断是否到最底部,最终执行到最底部 no_more_msg_style=& # 39;显示:没有;& # 39; 而真正的: wait.until (EC.presence_of_element_located ((By.XPATH & # 39;//跨度(@class=疤崾緅s_no_more_msg"和文本()=耙盐薷唷癩& # 39;))) no_more=browser.find_element_by_xpath(& # 39;//跨度(@class=癹s_no_more_msg"技巧;和文本()=耙盐薷唷癩& # 39;) now_style=no_more.get_attribute(& # 39;风格# 39;) 如果str (now_style); (no_more_msg_style)==1: #说明已经加载完了 打破 其他: #停顿一会,等待浏览器加载 time . sleep (5) #通过JS,执行到最底部 browser.execute_script (& # 39; window.scrollTo (0, document.body.scrollHeight) & # 39;)
4,关键信息获取。
根据html,分析得出文章url处在& lt; div是否=?000000026“祝辞中。
& lt; div类=皐eui_msg_card js_card"是否=?000000026“比; & lt; div类=皐eui_msg_card_hd"在2017年1月13日& lt;/div> & lt; div类=皐eui_msg_card_bd"祝辞 & lt; !——图文——比; & lt; !——普通图文——比; & lt; div id=癢XAPPMSG1000000026"类=皐eui_media_box appmsg js_appmsg"href=癶ttp://mp.weixin.qq.com/s& # 63; __biz=MzI5MDQ4NzU5MA==,=2247483748,中期idx=1, sn=e804e638484794181a27c094f81be8e1& chksm=ec1e6d2ddb69e43bd3e1f554c2d0cedb37f099252f122cee1ac5052b589b56f428b2c304de8e&现?38 # wechat_redirect",data-t=?”的在 & lt;跨类=皐eui_media_hd js_media"data-s=?40”;href=癶ttp://mp.weixin.qq.com/s& # 63; __biz=MzI5MDQ4NzU5MA==,=2247483748,中期idx=1, sn=e804e638484794181a27c094f81be8e1& chksm=ec1e6d2ddb69e43bd3e1f554c2d0cedb37f099252f122cee1ac5052b589b56f428b2c304de8e&现?38 # wechat_redirect"数据类型=癆PPMSG"比; & lt;/span> & lt; div类=皐eui_media_bd js_media"数据类型=癆PPMSG"比; & lt; h5类=皐eui_media_title"href=癶ttp://mp.weixin.qq.com/s& # 63; __biz=MzI5MDQ4NzU5MA==,=2247483748,中期idx=1, sn=e804e638484794181a27c094f81be8e1& chksm=ec1e6d2ddb69e43bd3e1f554c2d0cedb37f099252f122cee1ac5052b589b56f428b2c304de8e&现?38 # wechat_redirect"比; 承认自己是难民有什么错 & lt;/h5> 类& lt; p=皐eui_media_desc"祝辞枷锁已经足够沉重,谢绝道德绑架& lt;/p> 类& lt; p=皐eui_media_extra_info"在2017年1月13日& lt;/p> & lt;/div> & lt;/div> & lt;/div> & lt;/div>
文章类型主要分为,
& lt; div类=皐eui_media_bd js_media"数据类型=癆PPMSG"祝辞
引用>
& lt; div类=皐eui_media_bd js_media"数据类型=癟EXT"祝辞有无原创进行划分。
最终实现:
% % 结果=[] errlist=[] #先得到其中一个 el_divs=browser.find_elements_by_xpath (& # 39;//div [@class=皐eui_msg_card_list"]/div [@class=皐eui_msg_card js_card"] & # 39;) 我=0 在div el_divs: 日期=标题=url=yuanchuang=& # 39; & # 39; 试一试: 日期=div.find_element_by_xpath (& # 39;。//div [@class=皐eui_msg_card_hd"] & # 39;) .get_attribute (& # 39; innerhtml # 39;) el_content=div.find_element_by_xpath (& # 39;。//div [@class=皐eui_media_bd js_media"] & # 39;) 如果el_content.get_attribute(& # 39;数据类型# 39;)==& # 39;APPMSG& # 39;: el=el_content.find_element_by_xpath (& # 39;。/h5 (@class=皐eui_media_title") & # 39;) title=el.text url=el.get_attribute (& # 39; hrefs& # 39;) xb=el_content.find_element_by_xpath (& # 39;/p [@class=皐eui_media_extra_info"] & # 39;)。text yuanchuang=& # 39;原创& # 39;如果xb.find(& # 39;原创& # 39;)!其他=1 & # 39;& # 39; elif el_content.get_attribute(& # 39;数据类型# 39;)==& # 39;文本# 39;: title=& # 39;随文& # 39; url=el_content.find_element_by_xpath (& # 39;。/div # 39;)。text yuanchuang=& # 39;原创& # 39; null null null null null null null nullPython中硒爬取微信公众号文章的方法