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 相关文章推荐
分享15个最受欢迎的Python开源框架
Jul 13 Python
Python使用CMD模块更优雅的运行脚本
May 11 Python
python链接Oracle数据库的方法
Jun 28 Python
Python爬虫抓取代理IP并检验可用性的实例
May 07 Python
Flask框架Jinjia模板常用语法总结
Jul 19 Python
Python datetime和unix时间戳之间相互转换的讲解
Apr 01 Python
Python OpenCV 使用滑动条来调整函数参数的方法
Jul 08 Python
使用python和pygame制作挡板弹球游戏
Dec 03 Python
python不同系统中打开方法
Jun 23 Python
Pycharm如何自动生成头文件注释
Nov 14 Python
Pytorch使用shuffle打乱数据的操作
May 20 Python
python数字图像处理数据类型及颜色空间转换
Jun 28 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
基于mysql的bbs设计(三)
2006/10/09 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
PHP获取php,mysql,apche的版本信息示例代码
2014/01/16 PHP
thinkphp框架实现数据添加和显示功能
2016/06/29 PHP
Yii2使用表单上传文件的实例代码
2017/08/03 PHP
laravel-admin 管理平台获取当前登陆用户信息的例子
2019/10/08 PHP
解决php用mysql方式连接数据库出现Deprecated报错问题
2019/12/25 PHP
模仿JQuery sortable效果 代码有错但值得看看
2009/11/05 Javascript
javascript 45种缓动效果 非常酷
2011/06/28 Javascript
JavaScript高级程序设计(第3版)学习笔记 概述
2012/10/11 Javascript
js单例模式的两种方案
2013/10/22 Javascript
showModalDialog模态对话框的使用详解以及浏览器兼容
2014/01/11 Javascript
使用BootStrap建立响应式网页——通栏轮播图(carousel)
2016/12/21 Javascript
el表达式 写入bootstrap表格数据页面的实例代码
2017/01/11 Javascript
jquery dialog获取焦点的方法
2017/02/09 Javascript
原生JS实现层叠轮播图
2017/05/17 Javascript
Vue的实例、生命周期与Vue脚手架(vue-cli)实例详解
2017/12/27 Javascript
nodeJS模块简单用法示例
2018/04/21 NodeJs
ES6 Array常用扩展的应用实例分析
2019/06/26 Javascript
详解JavaScript中精度失准问题及解决方法
2020/02/04 Javascript
[02:07]2018DOTA2亚洲邀请赛主赛事第三日五佳镜头 fy极限反杀
2018/04/06 DOTA
python使用电子邮件模块smtplib的方法
2016/08/28 Python
python使用pygame框架实现推箱子游戏
2018/11/20 Python
详解pytorch中squeeze()和unsqueeze()函数介绍
2020/09/03 Python
中国最大的潮流商品购物网站:YOHO!BUY有货
2017/01/07 全球购物
Bose美国官网:购买Bose耳机和音箱
2019/03/10 全球购物
eBay加拿大站:eBay.ca
2019/06/20 全球购物
俄罗斯美容和健康网上商店:Созвездие Красоты
2019/07/23 全球购物
党员思想汇报范文
2013/12/30 职场文书
公司人力资源的自我评价
2014/01/02 职场文书
弘扬焦裕禄精神走群众路线思想汇报
2014/09/12 职场文书
对党的十八届四中全会的期盼
2014/10/17 职场文书
医院领导班子四风问题对照检查材料
2014/10/26 职场文书
2014年采购部工作总结
2014/11/20 职场文书
公司开业主持词
2015/07/02 职场文书
详解Mysql数据库平滑扩容解决高并发和大数据量问题
2022/05/25 MySQL