搜狗微信的抓取总结

最近抓取了搜狗微信的数据,虽然也破解了跳转之类的,但是最后因为抓取的链接有时效性放弃了,也总结下

一样的,输入关键词,抓取列表,再回去跳转后的微信链接

前10页是可以随便看的,也不需要登录,10页之后的数据需要微信扫码登录,这一块没法破解

链接参数很多最后可以精简为

https://weixin.sogou.com/weixin?query=烽火&page=11&type=2

page就是页码,query就是关键字,type 是搜索文章还是搜索公众号

  • 获取真实链接

其实很简单的代码,先要在url后面构造出 k 和 h,转化为 java 代码就是

// 拼接搜狗跳转参数k和h
public static String getLinkUrl(String url) {
	int b = ((int) Math.floor(100 * Math.random())) + 1;
	int a = url.indexOf("url=");
	int k = a + 4 + 21 + b;
	String d = url.substring(k, k + 1);
	System.out.println(d);
	url += "&k=" + b + "&h=" + d;
	return "https://weixin.sogou.com" + url;
}

有参数的链接直接请求是会出验证码的,需要cookie,需要的cookie只要是两个 一个是 SUV,一个是 SNUID,这两个cookie获取都很简单,通过分析可以得到

1.SUV 是可以通过访问 https://pb.sogou.com/pv.gif 来获取到

2.SNUID 在搜索的时候就会有了

所以我们加上这两个cookie就能获取到具体的微信的链接了

剩下的就是把这个链接取出来就行啦

  • 后记

虽然还有很多细节没有完善,但是最坑的是最后的微信链接是有时效性的

太坑了,市面上有将有时效的链接转换为没有时效的链接的商业服务,不知道是他们是怎么实现的。目前在看微信客户端里面的搜一搜,因为通过客户端的搜一搜搜出来的链接是短短的,应该是失效很长的

2020-06-04 更新

找到了转换永久链接的办法,把有时效性的链接复制到微信客户端里面,不管是过没过期的链接都是能够打开的,再把链接复制出来就是永久的链接了,使用了 python pyautogui 来操作的,很简单,也很low,速度不快,就不放代码了。

### 使用 Scrapy 进行搜狗微信网页数据抓取 为了实现对搜狗微信页面的数据抓取,推荐使用成熟的框架如 Scrapy[^4]。Scrapy 是一个开源且协作式的框架,用于从网站提取所需数据,在快速、简单的同时保持可扩展性。 #### 安装依赖库 首先需要确保环境中已经安装了必要的工具包: ```bash pip install scrapy requests beautifulsoup4 lxml ``` #### 创建 Scrapy 项目并配置 Spider 创建一个新的 Scrapy 项目来组织代码逻辑: ```bash scrapy startproject sogou_weixin_spider cd sogou_weixin_spider ``` 定义 spider 文件 `sogouweixin.py` 来处理具体的爬虫行为: ```python import scrapy from bs4 import BeautifulSoup class SogouWeixinSpider(scrapy.Spider): name = 'sogou_weixin' allowed_domains = ['weixin.sogou.com'] def __init__(self, query=None, *args, **kwargs): super(SogouWeixinSpider, self).__init__(*args, **kwargs) self.start_urls = [ f'https://weixin.sogou.com/weixin?type=2&query={query}' ] def parse(self, response): soup = BeautifulSoup(response.text, 'lxml') articles = [] for item in soup.select('.news-list .txt-box'): title = item.h3.get_text(strip=True) link = item.a['href'] article_data = { 'title': title, 'link': link } yield article_data # Follow links to individual posts (optional) yield scrapy.Request(link, callback=self.parse_article) def parse_article(self, response): pass # Implement parsing of full post content here ``` 此段代码实现了基本的功能,即向指定关键词发起请求,并解析返回 HTML 中的文章列表信息。对于每篇文章链接还可以进一步访问详情页获取更多信息[^5]。 #### 执行爬虫任务 运行上述编写的蜘蛛程序以启动实际的抓取过程: ```bash scrapy crawl sogou_weixin -a query="Python" ``` 这里 `-a query="Python"` 参数指定了要搜索的关键字为 "Python",可以根据需求替换其他感兴趣的主题词。 #### 数据存储与后续处理 收集到的数据可以通过多种方式保存下来供以后分析使用,比如 JSON 文件、CSV 表格或是数据库记录等。具体操作可以在 settings.py 或者 pipeline.py 中设置相应的导出路径和格式。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值