搜狗微信添加搜索工具爬虫

前言

之前也有做过搜狗微信的爬虫,但是,在加入搜索工具的时候需要加入上一步的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('//div[@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

微信公众号:微分析下

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
好的,下面是一个基于Scrapy框架开发的微信公众号爬虫程序的示例代码: 首先,我们需要在命令行中安装Scrapy和其他相关依赖: ``` pip install scrapy pip install scrapy-user-agents pip install scrapy-redis pip install scrapy-splash ``` 然后,创建一个新的Scrapy项目: ``` scrapy startproject wechat_spider ``` 接下来,进入项目目录并创建一个Spider: ``` cd wechat_spider scrapy genspider wechat_spider weixin.sogou.com ``` 在Spider中,我们需要定义要爬取的URL和页面元素的解析方法。下面是示例代码: ```python import scrapy from scrapy_splash import SplashRequest from scrapy_redis.spiders import RedisSpider class WechatSpider(RedisSpider): name = 'wechat_spider' allowed_domains = ['weixin.sogou.com'] start_urls = ['https://weixin.sogou.com/'] def parse(self, response): # 构造搜狗微信搜索的URL keyword = 'Python' url = f'https://weixin.sogou.com/weixin?type=1&s_from=input&query={keyword}&ie=utf8&_sug_=n&_sug_type_=' yield SplashRequest(url, self.parse_search_result, args={'wait': 10}) def parse_search_result(self, response): # 解析搜狗微信搜索结果页面 articles = response.css('.news-box .news-list li .txt-box h3 a::attr(href)').getall() for article_url in articles: yield SplashRequest(article_url, self.parse_article, args={'wait': 10}) def parse_article(self, response): # 解析公众号文章页面 title = response.css('#activity-name::text').get() content = response.css('#js_content').get() yield {'title': title, 'content': content} ``` 在这个示例中,我们使用了Scrapy-Redis、Scrapy-Splash和Scrapy-User-Agents等扩展库。我们首先在parse方法中构造搜狗微信搜索的URL,并使用SplashRequest发送请求。在parse_search_result方法中,我们解析搜狗微信搜索结果页面,获取每篇文章的URL,并再次使用SplashRequest发送请求。最后,在parse_article方法中,我们解析公众号文章页面,获取文章标题和内容,并通过yield返回给Scrapy框架。 在运行爬虫之前,我们需要在settings.py中配置Redis和Splash的相关参数: ```python # Redis配置 REDIS_HOST = 'localhost' REDIS_PORT = 6379 REDIS_PARAMS = {'password': 'your_password'} # Splash配置 SPLASH_URL = 'http://localhost:8050' # 下载中间件配置 DOWNLOADER_MIDDLEWARES = { 'scrapy_user_agents.middlewares.RandomUserAgentMiddleware': 400, 'scrapy_splash.SplashCookiesMiddleware': 723, 'scrapy_splash.SplashMiddleware': 725, 'scrapy.downloadermiddlewares.httpcompression.HttpCompressionMiddleware': 810, } # 爬虫中间件配置 SPIDER_MIDDLEWARES = { 'scrapy_splash.SplashDeduplicateArgsMiddleware': 100, } # Splash参数配置 SPLASH_ARGS = { 'wait': 5, 'images': 0, 'render_all': 1, 'lua_source': """ function main(splash, args) splash.private_mode_enabled = false assert(splash:go(args.url)) assert(splash:wait(args.wait)) return splash:html() end """, } ``` 最后,使用以下命令启动爬虫: ``` scrapy crawl wechat_spider ``` 这是一个简单的微信公众号爬虫程序示例,你可以根据自己的需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值