爬取结果

如松.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
网友评论