Python 爬取公众号的历史文章

简单直接上:

原理:

利用搜狗搜索访问指定公众号,获得公众号最新的前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()

Python 爬取公众号的历史文章_第1张图片

你可能感兴趣的:(python,学习)