Python selenium爬取微信公众号文章代码详解
参照资料:seleniumwebdriver添加cookie:https://www.nhooo.com/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为保存的excelcookies foriinrange(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;' whileTrue: wait.until(EC.presence_of_element_located((By.XPATH,'//span[@class="tipsjs_no_more_msg"andtext()="已无更多"]'))) no_more=browser.find_element_by_xpath('//span[@class="tipsjs_no_more_msg"andtext()="已无更多"]') now_style=no_more.get_attribute('style') ifstr(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日