Python3 实现搜狗微信文章爬虫并导出 Excel

陆景行
陆景行
发布时间:2026-10-13 | 2人浏览过
原创

本文介绍使用 Python3 通过搜狗微信搜索接口抓取文章标题与链接的方法。利用 urllib 构建请求,通过正则表达式解析 HTML 获取数据,并借助 xlsxwriter 模块将结果写入 Excel 文件。文中包含完整代码示例及 URL 构造逻辑说明,适用于 Python3.4 及 Windows 环境,需注意网站结构变更可能导致脚本失效。

环境要求:

Python 3.4

Windows 操作系统

功能说明:利用搜狗微信搜索接口 http://weixin.sogou.com/ 检索特定关键词的微信文章,并将获取的文章标题及对应链接导出至 Excel 表格中。

注意事项:代码依赖 xlsxwriter 模块。本程序编写于 2017 年 7 月 11 日,由于搜狗网站可能进行结构调整,后续使用该程序可能会因接口变化而失效。代码逻辑较为简单,去除注释后约 40 行。

核心逻辑:

实现思路:构造初始 URL -> 使用正则表达式提取标题和链接 -> 循环改变 page 参数以翻页 -> 将提取的数据导入 Excel 文件。

开发建议:编写爬虫前,建议先手动在浏览器中操作一遍目标网站,以熟悉页面结构和 URL 变化规律。

访问搜狗微信搜索页面,例如输入关键词“图片识别”进行搜索。此时浏览器地址栏 URL 会变为类似“http://weixin.sogou.com/weixin?type=2&query=%E5%9B%BE%E7%89%87%E8%AF%86%E5%88%AB&ie=utf8&s_from=input&_sug_=n&_sug_type_=1&w=01015002&oq=&ri=4&sourceid=sugg&sut=0&sst0=1499778531195&lkt=0%2C0%2C0&p=40040108”的形式。其中标红部分为关键参数:type=1 表示搜索公众号(此处暂不讨论),query 为经过 URL 编码的搜索关键词,此外还有一个隐藏参数 page=1 控制页码。

当手动点击跳转到第二页时,观察 URL 变化,例如变为“http://weixin.sogou.com/weixin?oq=&query=%E5%9B%BE%E7%89%87%E8%AF%86%E5%88%AB&_sug_type_=1&sut=0&lkt=0%2C0%2C0&s_from=input&ri=4&_sug_=n&type=2&sst0=1499778531195&page=2&ie=utf8&p=40040108&dp=1&w=01015002&dr=1”。通过对比可以发现 page 参数的变化规律。

至此,我们可以确定构造 URL 的方法。

url = 'http://weixin.sogou.com/weixin?type=2&query='+search+'&page='+str(page)

其中 search 变量代表用户输入的搜索关键词,需使用 quote() 函数进行编码后拼接进 URL。

search = urllib.request.quote(search)

page 变量用于控制翻页循环。

for page in range(1,pagenum+1):
 url = 'http://weixin.sogou.com/weixin?type=2&query='+search+'&page='+str(page)

获取完整 URL 后,下一步是访问该 URL 并获取页面数据。这需要通过创建 opener 对象并添加 headers(如 User-Agent)来模拟浏览器请求。

import urllib.request
 header = ('User-Agent','Mozilla/5.0')
 opener = urllib.request.build_opener()
 opener.addheaders = [header]
 urllib.request.install_opener(opener)
 data = urllib.request.urlopen(url).read().decode()

获取页面源码后,利用正则表达式提取所需的标题和链接数据。

 import re
  finddata = re.compile('<a target="_blank" href="(.*?)" rel="external nofollow" rel="external nofollow" .*?uigs="article_title_.*?">(.*?)</a>').findall(data)
  #finddata = [('',''),('','')]

从正则表达式提取的数据中可能包含干扰项(如链接中的 'amp;')和无关格式(如标题中的 '<em><...><....></em>' 标签),需使用 replace() 方法对这些干扰内容进行清洗处理。

 title = title.replace('<em><!--red_beg-->','')
 title = title.replace('<!--red_end--></em>','')
 link = link.replace('amp;','')

将清洗后的标题和链接存入列表以便后续处理。

 title_link.append(link)
 title_link.append(title)

当所有页面的标题和链接都获取完毕后,接下来执行将数据导入 Excel 的操作。

首先初始化 Excel 文件。

 import xlsxwriter
 workbook = xlsxwriter.Workbook(search+'.xlsx')
 worksheet = workbook.add_worksheet('微信')

将包含标题和链接的列表数据写入 Excel 文件中。

 for i in range(0,len(title_link),2):
  worksheet.write('A'+str(i+1),title_link[i+1])
  worksheet.write('C'+str(i+1),title_link[i])
 workbook.close()

完整代码示例如下:

'''
python3.4 + windows
羽凡-2017/7/11-
用于搜索微信文章,保存标题及链接至Excel中
每个页面10秒延迟,防止被限制
import urllib.request,xlsxwriter,re,time
'''
import urllib.request
search = str(input("搜索微信文章:"))
pagenum = int(input('搜索页数:'))
import xlsxwriter
workbook = xlsxwriter.Workbook(search+'.xlsx')
search = urllib.request.quote(search)
title_link = []
for page in range(1,pagenum+1):
 url = 'http://weixin.sogou.com/weixin?type=2&query='+search+'&page='+str(page)
 import urllib.request
 header = ('User-Agent','Mozilla/5.0')
 opener = urllib.request.build_opener()
 opener.addheaders = [header]
 urllib.request.install_opener(opener)
 data = urllib.request.urlopen(url).read().decode()
 import re
 finddata = re.compile('<a target="_blank" href="(.*?)" rel="external nofollow" rel="external nofollow" .*?uigs="article_title_.*?">(.*?)</a>').findall(data)
 #finddata = [('',''),('','')]
 for i in range(len(finddata)):
  title = finddata[i][1]
  title = title.replace('<em><!--red_beg-->','')
  title = title.replace('<!--red_end--></em>','')
  try:
   #标题中可能存在引号
   title = title.replace('&ldquo;','"')
   title = title.replace('&rdquo;','"')
  except:
   pass
  link = finddata[i][0]
  link = link.replace('amp;','')
  title_link.append(link)
  title_link.append(title)
 print('第'+str(page)+'页')
 import time
 time.sleep(10)
worksheet = workbook.add_worksheet('微信')
worksheet.set_column('A:A',70)
worksheet.set_column('C:C',100)
bold = workbook.add_format({'bold':True})
worksheet.write('A1','标题',bold)
worksheet.write('C1','链接',bold)
for i in range(0,len(title_link),2):
 worksheet.write('A'+str(i+1),title_link[i+1])
 worksheet.write('C'+str(i+1),title_link[i])
workbook.close()
print('导入Excel完毕!')

以上关于 Python3 微信文章爬虫的实例讲解到此结束,希望能为读者提供参考。如有问题欢迎交流,也请支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表