python3之微信文章爬虫实例讲解


Posted in Python onJuly 12, 2017

前提:

python3.4

windows

作用:通过搜狗的微信搜索接口http://weixin.sogou.com/来搜索相关微信文章,并将标题及相关链接导入Excel表格中

说明:需xlsxwriter模块,另程序编写时间为2017/7/11,以免之后程序无法使用可能是网站做过相关改变,程序较为简单,除去注释40多行。

正题:

思路:打开初始Url --> 正则获取标题及链接 --> 改变page循环第二步 --> 将得到的标题及链接导入Excel

爬虫的第一步都是先手工操作一遍(闲话)

进入上面提到的网址,如输入:“图片识别”,搜索,网址变为“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=‘搜索关键词',关键词已经被编码,还有一个隐藏参数page=1

当你跳到第二页时可以看到“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”

好了,url可以得到了

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

search是要搜索的关键词,用quote()编码即可插入

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对象,添加header())

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('微信')

将title_link中的数据导入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('“','"')
   title = title.replace('”','"')
  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 相关文章推荐
Python命名空间详解
Aug 18 Python
Python中的进程分支fork和exec详解
Apr 11 Python
python判断windows系统是32位还是64位的方法
May 11 Python
在Mac OS上使用mod_wsgi连接Python与Apache服务器
Dec 24 Python
Python使用正则表达式抓取网页图片的方法示例
Apr 21 Python
python实现自主查询实时天气
Jun 22 Python
对python 读取线的shp文件实例详解
Dec 22 Python
Django接收照片储存文件的实例代码
Mar 07 Python
Keras自定义实现带masking的meanpooling层方式
Jun 16 Python
如何用Matplotlib 画三维图的示例代码
Jul 28 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
Sep 03 Python
python通配符之glob模块的使用详解
Apr 24 Python
python脚本替换指定行实现步骤
Jul 11 #Python
Python书单 不将就
Jul 11 #Python
Python编写一个闹钟功能
Jul 11 #Python
python自定义异常实例详解
Jul 11 #Python
详解python中的文件与目录操作
Jul 11 #Python
python 系统调用的实例详解
Jul 11 #Python
python中matplotlib实现最小二乘法拟合的过程详解
Jul 11 #Python
You might like
受疫情影响 动画《Re从零开始的异世界生活》第二季延期至7月
2020/03/10 日漫
ThinkPHP多表联合查询的常用方法
2020/03/24 PHP
js 纯数字不重复排列的另类方法
2010/07/17 Javascript
jquery使用ajax实现微信自动回复插件
2014/04/28 Javascript
jquery进行数组遍历如何跳出当前的each循环
2014/06/05 Javascript
JQuery悬停控制图片轮播——代码简单
2015/08/05 Javascript
JavaScript中错误正确处理方式小结你用对了吗
2017/10/10 Javascript
详解设置Webstorm 利用babel将ES6自动转码成ES5
2017/12/20 Javascript
vue.js或js实现中文A-Z排序的方法
2018/03/08 Javascript
vue项目中实现图片预览的公用组件功能
2018/10/26 Javascript
es6 filter() 数组过滤方法总结
2019/04/03 Javascript
NodeJs操作MongoDB教程之分页功能以及常见问题
2019/04/09 NodeJs
[10:24]郎朗助力完美“圣”典,天籁交织奏响序曲
2016/12/18 DOTA
windows系统下Python环境的搭建(Aptana Studio)
2017/03/06 Python
Python3.5实现的三级菜单功能示例
2019/03/25 Python
让Python脚本暂停执行的几种方法(小结)
2019/07/11 Python
python 实现图片上传接口开发 并生成可以访问的图片url
2019/12/18 Python
Python warning警告出现的原因及忽略方法
2020/01/31 Python
Jupyter Notebook打开任意文件夹操作
2020/04/14 Python
Python如何爬取qq音乐歌词到本地
2020/06/01 Python
django表单中的按钮获取数据的实例分析
2020/07/31 Python
Waterford美国官网:爱尔兰水晶制品品牌
2017/04/26 全球购物
美国传奇滑手Paul Rodriguez创办的街头滑板品牌:Primitive Skateboarding
2019/10/29 全球购物
eBay荷兰购物网站:eBay.nl
2020/06/26 全球购物
简述索引存取方法的作用和建立索引的原则
2013/03/26 面试题
教师批评与自我批评(群众路线)
2014/10/15 职场文书
2014年社区个人工作总结
2014/12/02 职场文书
高三毕业评语
2014/12/31 职场文书
高三语文复习计划
2015/01/19 职场文书
2015年办公室文员工作总结
2015/04/24 职场文书
赤壁观后感(2)
2015/06/15 职场文书
《狼牙山五壮士》教学反思
2016/02/17 职场文书
关于党风廉政建设宣传教育月的活动总结!
2019/08/08 职场文书
在校大学生才艺比赛策划书怎么写?
2019/08/26 职场文书
python 下载文件的几种方式分享
2021/04/07 Python
Python网络编程之ZeroMQ知识总结
2021/04/25 Python