Python使用urllib2爬取搜狗微信搜索公众号文章
本文介绍如何使用Python的urllib2库结合正则表达式,通过搜狗微信搜索接口爬取指定公众号的文章列表。教程涵盖从构建请求URL、解析HTML文本、提取JSON数据到拼接完整文章链接的完整流程,并提供可直接运行的代码示例,帮助开发者快速实现公众号文章抓取功能。
本文提供了一段使用Python爬取微信公众号文章的具体代码示例,供读者参考学习。
该方案基于urllib2库实现。首先需确保Python环境已正确安装,并配置好urllib2库。
程序入口函数负责获取公众号文章列表,其核心逻辑如下:
def openUrl():
print("启动爬虫,打开搜狗搜索微信界面")
# 加载页面
url = 'http://weixin.sogou.com/weixin?type=1&s_from=input&query=要爬取的公众号名称'
htmlContentObj = urllib2.urlopen(url)
# 将页面转化为文本
html = htmlContentObj.read()
# 正则匹配
str = re.findall(r"http://mp.weixin.qq.com/profile.+==",html)
# 替换转义符得到可访问的链接地址
tempHref = re.sub(r"&","&",str[0])
return tempHref
根据上一步获取到的文章列表页链接(注意区分列表页链接与具体文章页链接),将页面内容读取为文本字符串。
# 获取页面文本方法 def getHtmlStr(conurl): # 相当于把页面转化为文本 response = urllib2.urlopen(conurl) # 读取文本的字符串 htmlStr = response.read() return htmlStr
对读取到的文本进行解析,利用正则表达式匹配出公众号内文章的标题、链接地址等信息,并构建为JSON对象。
# 文本转换为所需要的json对象
def htmlToJsonObj(htmlStr):
# 正则匹配并得到需要的json字符串
jsonObjstr = re.findall(r"{\"list\":\[.+\]\}", htmlStr)
# 字符串转json
jsonObj = json.loads(jsonObjstr[len(jsonObjstr)-1])
return jsonObj
从生成的JSON对象中提取title字段,并拼接完整的URL(此处仅获取链接和标题)。将这两个内容分别存入数组,最终以JSON对象形式返回。注意:拼接URL时需将转义符(&)替换为普通符号(&)。
# 从json对象中取出所需要的url
def jsonObjToArray(jsonObj):
hrefs = []
titles = []
# url中的&在html中是& ,故需要替换,下面为正则
patten = re.compile(r"&")
# 数组
arr = jsonObj["list"]
# 循环添加
for i in range(len(arr)):
# 每次替换字符串
fixHref = re.sub(patten,"&",arr[i]["app_msg_ext_info"]["content_url"])
# 添加到数组
titles.append(arr[i]["app_msg_ext_info"]["title"])
hrefs.append("https://mp.weixin.qq.com"+fixHref)
jsons = {"hrefs":hrefs,"titles":titles}
return jsons
#打开浏览器,进行工作
def start():
tempHref = openUrl()
# 获取页面文本
htmlStr = getHtmlStr(tempHref)
# 文本转json对象
jsonObj = htmlToJsonObj(htmlStr)
# f返回所需要的url数组
return jsonObjToArray(jsonObj)
最后,通过启动程序的主方法运行爬虫,并打印出抓取到的相关信息。
if __name__=='__main__':
try:
hrefs = start()
count = len(hrefs["hrefs"])
for i in range(count):
print("标题:"+hrefs["titles"][i].encode("utf-8"))
print("爬取到的路径:"+hrefs["hrefs"][i].encode("utf-8"))
print("------------->>爬取并打印完毕")
except Exception as e:
print(str(e))
运行上述代码前,需导入必要的Python包:
import urllib2 import json import re
依次赋值并填写目标公众号名称,保存代码后运行即可执行爬取任务。
以上就是本文的全部内容,希望对各位的学习有所帮助,也欢迎大家继续支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













