搜狗微信
前言
之前也有做过搜狗微信的爬虫,但是,在加入搜索工具的时候需要加入上一步的cookie,但是我们每次的cookie会有时效性。而且经常被封锁,这是一个很让人头疼的事情。就算使用了scrapy中的cookiejar也同样表现出了不稳定。而且还需要维持一个cookie池,就在我写cookie池代码的时候发现了这样的一个事情。实际上我们在请求搜索工具的时候是需要上一步的链接的,表名我们这一步是从哪一个页面过来的。referer参数起着关键性的作用。
说明
当我们爬取搜狗微信时,往往是根据自己的关键字来爬去相关内容,同时,我们也需要通过搜狗微信自带的搜索工具来更加精准的获取我们需要的数据。
注意事项:
1、从首页我们需要输入关键字才可以到达选择搜索工具的页面
2、添加过搜索工具的链接,是不能够粘贴出来再打开的(会回到首页)
分析过程
1、在首页输入关键字,此时还没有加入搜索工具。
2、加入搜索工具
可以看出这一步相对于上一步链接中主要的变化是tsn参数。
废话不说了,直接上干货。
通过对搜索工具这一步进行抓包
此时很惊讶的发现这两个链接和上面请求的链接是一样的。referer是不带搜索工具的,request url是带有搜索工具的链接。所以就突发奇想,是不是只是在每一次的请求中带有这个referer就可以访问了,果真如此。然后就可以就行爬取带有搜索工具的链接了。就不用使用cookie就可以完成。
使用scrapy的核心代码如下
def parse(self, response):
query = re.findall('&query=(.*?)&', response.url)[0]
headers = {
'Accept': 'text/html,APPlication/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'cache-Control': 'no-cache',
'Connection': 'keep-alive',
'User-Agent': 'Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36',
'Referer': 'http://weixin.sogou.com/weixin?type=2&ie=utf8&s_from=input&_sug_=y&_sug_type_=&query={}'.format(query),
'Host': 'weixin.sogou.com',
'pragma': 'no-cache',
'Upgrade-Insecure-Requests': '1',
}
url = "http://weixin.sogou.com/weixin?type=2&ie=utf8&query={}&tsn=1&ft=&et=&interation=&wxid=&usip=&page=1".format(query)
yield scrapy.Request(url=url,dont_filter=True,callback=self.parse_1,headers=headers,meta={"originalUrl":response.meta['originalUrl'],"headers":headers})
def parse_1(self,response):
p = response.meta
try:
for sel in response.xpath('//p[@class="news-box"]/ul[@class="news-list"]/li'):
parse.....
# 解析网页
if 翻页的条件:
yield scrapy.Request(url, meta={"headers":p['headers']}, callback=self.parse_1, dont_filter=True,headers=p['headers'])
else:
return
except:
print traceback.format_exc()
使用requests的核心代码如下
代码很凌乱,毕竟这个requests的代码是打草稿用的,不喜勿喷。
# coding=utf-8
import requests
from lxml import etree
headers = {
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36',
}
def get_key_words_list():
# 基础链接
base_url = 'http://weixin.sogou.com/'
# 我们需要的cookie是搜索关键字后的cookie
# 我们选取的关键字是搜狗威信本身热搜榜中的关键字
base_html = etree.HTML(requests.get(url=base_url, headers=headers).content.encode('utf8','ignore').decode('utf8','ignore'))
keywords = []
for keyword in base_html.xpath('//ol[@id="topwords"]/li/a/text()'):
keywords.append(keyword)
return keywords
cookie_url = 'http://weixin.sogou.com/weixin?type=2&ie=utf8&s_from=input&_sug_=y&_sug_type_=&query={0}'.format(get_key_words_list()[0])
cookie_headers = {
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Encoding': 'gzip, deflate',
'Accept-Language': 'zh-CN,zh;q=0.9',
'Cache-Control': 'no-cache',
'Connection': 'keep-alive',
'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.75 Safari/537.36',
'Host': 'weixin.sogou.com',
'Pragma': 'no-cache',
'Referer': cookie_url,
'Upgrade-Insecure-Requests': '1',
}
test_url = "http://weixin.sogou.com/weixin?type=2&ie=utf8&query={}&tsn=1&ft=&et=&interation=&wxid=&usip=".format(get_key_words_list()[0])
html = requests.get(url=test_url,headers=cookie_headers).content.encode('utf8','ignore').decode('utf8','ignore')
s = etree.HTML(html)
for title in s.xpath('//h3/a/text()'):
print title
相关阅读
感觉啊,现在常见或不常见的搜索引擎种类繁多,不同品牌出品的引擎都有着自身的优势和劣势,但常玩网的盆友都知道:根据搜索目的去选择搜
很多人都觉得自己的手速不够快,总是红包刚刚出来就被别人抢走了,这种时候我们就需要一个可以帮助我们抢红包的软件,但是这么多软件当
关于怎么设置微信摇一摇的距离以及有什么方法申请微信摇一摇周边设置这两个问题小编将马上就来为大家揭晓。但是前提是希望大家能
尊老爱幼是我们每一个年轻人都应有的意识,微信上的亲属卡和淘宝亲情账号都是一样,目的是为了帮助亲朋好友买单,增加相互之间的互动,让
当我们在百度搜索问题时,百度会自动推荐出来一些下拉词汇。比如搜索“小牛外汇”时,下拉词出现了“重庆小牛外汇骗