问题背景
搜狗搜索提供了一个微信公账号文章搜索的功能,之前看过崔庆才老师的教程(使用代理池通过代理访问),今天自己尝试了一下
分析页面
- 进入搜狗微信搜索,查询关键字狗,显示信息如下:
打开控制台,通过观察请求的url,可以总结出如下关键信息https://weixin.sogou.com/weixin?query=%E7%8B%97&type=2&page=2
:链接中query后跟查询关键字,page表示页数。有了这个url,就可以通过requests,使用代码访问了。 - 接下来分析页面的文档结构
包含了文章的标题信息。
代码
def get_article_title(url):
resp = requests.get(url)
if resp.status_code == 200:
# print(resp.text)
info = resp.text.replace('\n', '').replace('\r', '')
soup = BeautifulSoup(info, 'lxml')
soup.prettify()
ul = soup.find('ul', class_='news-list')
for li in ul.contents:
if isinstance(li, Tag):
title = li.find('div', class_='txt-box').contents[0].get_text()
print(title)
else:
print(resp.status_code)
base_url = 'https://weixin.sogou.com/weixin?query=%E7%8B%97&type=2&page={}'
for i in range(1, 11):
url = base_url.format(i)
print(url)
get_article_title(url)
运行代码,打印了url和解析的文章名称,如下:
狗年不苟测天命 188现金红包领回家
出国前把狗给父母养,半年后回来,忍不住失声大哭!
狗,下次遛你那有“狂犬病”的主人时,记得要栓绳好吗?
狗朋友:国庆节后,要“发了”,天上掉馅饼的“功德”被你摊上了,快来接!
狗眼看人低的女人,傻眼了吧
狗眼看人低的女人,傻眼了吧!
医高一尺,狗高一丈,是真正的高手没错了!
10月1日生肖运势_猪、马、狗大吉
10月1日生肖运势_猪、马、狗大吉
“狗,请拴好你家网红”
https://weixin.sogou.com/weixin?query=%E7%8B%97&type=2&page=10
但是,如果多运行几次会发现报错:
Traceback (most recent call last):
File "D:/pythonSpace/lear_scrapy/test/t1.py", line 45, in
get_article_title(url)
File "D:/pythonSpace/lear_scrapy/test/t1.py", line 31, in get_article_title
for li in ul.contents:
AttributeError: 'NoneType' object has no attribute 'contents'
异常信息很明显,上述代码没有按我希望的解析出ul,ul是None,但是之前是明明可以运行的。然后我尝试将请求返回的网页信息打印出来,部分结果如下:
IP�1.49.13.70
访����2018.10.01 00:18:33
ç�¨æ�·æ�¨å¥½ï¼�æ�¨ç��访é�®è¿�äº�é¢�ç¹�ï¼�为确认æ�¬æ¬¡è®¿é�®ä¸ºæ£å¸¸ç�¨æ�·è¡�为ï¼�é��è¦�æ�¨å��å�©éª�è¯�ã��