问题背景
搜狗搜索提供了一个微信公账号文章搜索的功能,之前看过崔庆才老师的教程(使用代理池通过代理访问),今天自己尝试了一下
分析页面
- 进入搜狗微信搜索,查询关键字狗,显示信息如下:
打开控制台,通过观察请求的url,可以总结出如下关键信息https://weixin.sogou.com/weixin?query=%E7%8B%97&type=2&page=2
:链接中query后跟查询关键字,page表示页数。有了这个url,就可以通过requests,使用代码访问了。 - 接下来分析页面的文档结构
<div class='txt-box'></div>
包含了文章的标题信息。
代码
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 <module>
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,但是之前是明明可以运行的。然后我尝试将请求返回的网页信息打印出来,部分结果如下:
<div class="content-box">
<p class="ip-time-p">IP�1.49.13.70<br>访����2018.10.01 00:18:33</p>
<p class="p2">ç�¨æ�·æ�¨å¥½ï¼�æ�¨ç��访é�®è¿�äº�é¢�ç¹�ï¼�为确认æ�¬æ¬¡è®¿é�®ä¸ºæ£å¸¸ç�¨æ�·è¡�为ï¼�é��è¦�æ�¨å��å�©éª�è¯�ã��</p>
<p class="p3"><label for="seccodeInput">éª�è¯�ç �ï¼�</label></p>
<form name="authform" method="POST" id="seccodeForm" action="/">
这段乱码的东西,我放在notepad++里面更改了多种文件编码也没有正确的显示文字信息,不过上面第一个P标签处能看到IP字样,所以我单纯地猜测是因为访问速度过去,我的IP被封住了,为了验证我的猜想,我打开浏览器访问了刚刚的页面,但是结果很奇葩,浏览器可以正常访问!如果IP被封,我的浏览器应该也不能访问才对啊?中间我尝试增加headers,使用代理,但是还是无法正常访问,搞了好久。最后只能说:这东西要是有爬虫经验,应该一早能想到!除了headers和代理,还有一个最重要的,Cookie!!!于是我在浏览器上查看了页面的cookie,有下面的那么多东西。不管了,先把cookie清一下
好了,清理了cookie以后,刷新出现了下面的页面:
果然是IP被禁了!但是很奇怪的是,上面这个
1.49.13.70
根本不是我的IP啊。这其中搜狗搜索做了什么处理我也没想清楚,留着后面看看能不能Google到吧。先输入验证码,保证浏览器可以正常访问。然后我把weixin.sougou.com
这个域下的cookie填到代码中再进行访问。发现代码可以正确运行:
https://weixin.sogou.com/weixin?query=%E7%8B%97&type=2&page=10
龚伟:老人与狗|聆听青山
“狗,请拴好你家网红”
主人训练狗子吃饭,马犬忍不住喷出口水泡泡,狗:我顶不住了……
在农村,为什么狗有时候会叫一晚上?农民说出实情,原因想不到!
生肖马,狗年过半!下半年仍需“注意”,小心祸不单行!
“你家的3条狗咬死了我家75只鸡”“你的鸡没办手续”
为发横财,去村里偷狗,十三年后,落得瘫痪乞讨无人管
搞笑图片:活的不如狗系列!
这款脏脏狗蛋糕,因做得太逼真!胆小点的都不敢吃!
“实拍”踹了狗一下竟然叫一群狗砸车
不过最后发现,如果访问频率过快,还是会出现上面的问题。我测试访问一个页面停止2秒没有问题。但是我用代理以后如果不添加cookie,还是会出现上面的错误,而且IP还是那个1.49.13.70
。这个坑先记着吧