麻瓜编程·python实战·第一周直播学习:微信公众号文章爬取

爬取结果

麻瓜编程·python实战·第一周直播学习:微信公众号文章爬取_第1张图片
如松.png

我的代码

# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
import requests, re

# 用session对象来提高性能
req_session = requests.session() 
sogou_search = 'http://weixin.sogou.com/weixin? ' \
               'type=1&query={}&ie=utf8&_sug_=n&_sug_type_='
headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64)  '
                        'AppleWebKit/537.36 (KHTML, like Gecko)  '
                        'Chrome/52.0.2743.116 Safari/537.36'}

# 从搜索页面(微信爬取唯一窗口)获取公众号地址
def get_onwer_url(url):
    web_data = req_session.get(url.format('如松'), headers=headers)
    soup = BeautifulSoup(web_data.text, 'lxml')
    owner_urls = soup.select('#sogou_vr_11002301_box_0')
    if owner_urls:
        owner_url = owner_urls[0].get('href')
        # print(owner_url)
        get_article_page(owner_url)

# 从公众号页面获取文章(使用正则匹配)
def get_article_page(url):
    web_data = req_session.get(url, headers=headers)
    # 文章地址隐藏在js之中,超级长一串
    articles = re.findall(
        r'\/s\?timestamp=\d{10}&src=\d&ver=\d&signature=\S{172}',
                          web_data.text)
    for article in articles:
        # 去除掉地址里面的"amp;"
        get_artical_info(article.replace('amp;',''))

# 爬取文章内容
def get_artical_info(url):
    # 链接需要处理一下
    goal = 'http://mp.weixin.qq.com' + url
    web_data = req_session.get(goal, headers=headers)
    soup = BeautifulSoup(web_data.text, 'lxml')
    lines = soup.find_all("p")
    for line in lines:
        # stripped_strings生成器
        line = line.stripped_strings
        for content in line:
            print(content)
    return

get_onwer_url(sogou_search)

我的感想:

  • 验证码的处理需要通过API,还没有处理过。
  • js的发现分析是一个可长可短的过程。
  • 关于session对象提高性能,requests官档有说明。
  • BeautifulSoup里的stripped_strings其实是一个生成器,需要for它后再使用。eg.,以前是直接list()列表化使用的呃
麻瓜编程·python实战·第一周直播学习:微信公众号文章爬取_第2张图片
_stripped_strings.png

你可能感兴趣的:(麻瓜编程·python实战·第一周直播学习:微信公众号文章爬取)