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

爬取结果

如松.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它后再使用。<a>eg.,以前是直接list()列表化使用的呃</a>
_stripped_strings.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,915评论 18 139
  • 这周正式开始学习,今天星期四,前面三天都花了很多时间去敲代码。截止昨天,我完成了所有第一周的学习和作业,打算做一个...
    bbjoe阅读 1,507评论 0 0
  • 经朋友介绍,认识到了python实战:四周实习爬虫系统,然后看了一下试看教程,觉得课程挺不错的,→_→重点是对于...
    隐逆阅读 776评论 0 50
  • 出现的问题: 当爬取交易地点,使用代码 时,爬取的结果是 ['交易地点:'],而不是我想要的‘地点-地点’形式 ...
    鸣人吃土豆阅读 1,333评论 1 0
  • 小时候看赵本山的小品,台词有句是“加利福尼亚,对,家里待不下!”我常常想加利福尼亚是什么地方呢? 三十年过去了,现...
    傻狍子616阅读 2,087评论 3 1