简单直接上:
原理:
利用搜狗搜索访问指定公众号,获得公众号最新的前10篇文章,
注意需要利用select +PhantomJS 加载js 的内容,以及‘&’的转义(代码后附上特殊符号转义)
缺点:
只能获取到最新的10篇文章,若需要获取所有历史文章,可以通过微信公众平台的方法获取,网上有解决方案
# encoding=utf8
# @Author : LYG
# @Time : 2019/2/13 11:16
# @Name : CrawlWechat.py
from bs4 import BeautifulSoup
from urllib2 import urlopen
from selenium import webdriver
def get_url():
'''
通过搜狗搜索,获取指定公众号的最新链接
url : 搜索链接
:return:
new_url : 指定公众号的最新链接
'''
# 修改query的参数即可(支持中文修改),也可以直接访问域名带data就好
# type=1 指明是搜索公众号,type=0 指明是搜索文章
url = "https://weixin.sogou.com/weixin?type=1&s_from=input&query=Linux公社&ie=utf8&_sug_=n&_sug_type_="
page = urlopen(url)
html = page.read()
soup = BeautifulSoup(html,'lxml')
node = soup.select('a[uigs="account_name_0"]')
new_url = node[0]['href']
return new_url
def get_content():
'''
拿到公众号里最新十篇文章的标题与URL
:return:
'''
url = get_url()
# phantomjs.exe 的绝对路径
driver= webdriver.PhantomJS(executable_path=r"D:\python\venv\Lib\site-packages\selenium\webdriver\phantomjs\phantomjs-2.1.1-windows\phantomjs-2.1.1-windows\bin\phantomjs.exe")
driver.get(url)
html = driver.page_source
result_url = []
result_title = []
soup = BeautifulSoup(html, 'lxml')
titles = soup.select("h4.weui_media_title")
for title in titles:
result_title.append(title.text)
# & 符号转义 & = &
result_url.append("https://mp.weixin.qq.com"+title['hrefs'].replace('&','&'))
with open('a.txt','w') as f:
for i in range(len(result_url)):
f.write("%s %s"%(result_title[i].encode('utf-8'),result_url[i].encode('utf-8')))
f.write('\n')
driver.quit()
if __name__ == '__main__':
get_content()
#get_url()
