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日