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常用的文件及文件路径、目录操作方法汇总介绍
May 21 Python
Python中的ctime()方法使用教程
May 22 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
Jan 18 Python
Python之os操作方法(详解)
Jun 15 Python
对TensorFlow中的variables_to_restore函数详解
Jul 30 Python
详解Python安装tesserocr遇到的各种问题及解决办法
Mar 07 Python
python数据处理之如何选取csv文件中某几行的数据
Sep 02 Python
Python3实现配置文件差异对比脚本
Nov 18 Python
python 如何去除字符串头尾的多余符号
Nov 19 Python
python队列原理及实现方法示例
Nov 27 Python
Python操作dict时避免出现KeyError的几种解决方法
Sep 20 Python
Python在后台自动解压各种压缩文件的实现方法
Nov 10 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
一些 PHP 管理系统程序中的后门
2009/08/05 PHP
php 模拟POST提交的2种方法详解
2013/06/17 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
2017/12/21 PHP
jQuery前台数据获取实现代码
2011/03/16 Javascript
JQuery基础语法小结
2015/02/27 Javascript
JS闭包用法实例分析
2017/03/27 Javascript
vue-cli的webpack模板项目配置文件分析
2017/04/01 Javascript
Bootstrap模态框插件使用详解
2017/05/11 Javascript
JS表单提交验证、input(type=number) 去三角 刷新验证码
2017/06/21 Javascript
详解win7 cmd执行vue不是内部命令的解决方法
2017/07/27 Javascript
vue-ajax小封装实例
2017/09/18 Javascript
IE11下使用canvas.toDataURL报SecurityError错误的解决方法
2017/11/19 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
2019/11/07 Javascript
ElementUI多个子组件表单的校验管理实现
2019/11/07 Javascript
JS+HTML实现自定义上传图片按钮并显示图片功能的方法分析
2020/02/12 Javascript
vue-cli中实现响应式布局的方法
2021/03/02 Vue.js
[41:20]2014 DOTA2华西杯精英邀请赛 5 24 NewBee VS DK
2014/05/26 DOTA
使用Python3 编写简单信用卡管理程序
2016/12/21 Python
python ChainMap的使用和说明详解
2019/06/11 Python
python实现视频读取和转化图片
2019/12/10 Python
Python中socket网络通信是干嘛的
2020/05/27 Python
Python Mock模块原理及使用方法详解
2020/07/07 Python
Python爬取某平台短视频的方法
2021/02/08 Python
编写类String 的构造函数、析构函数和赋值函数
2012/09/09 面试题
.NET面试题:什么是值类型和引用类型
2016/01/12 面试题
机关办公室岗位职责
2014/04/16 职场文书
大学活动总结范文
2014/04/29 职场文书
体育之星事迹材料
2014/05/11 职场文书
劳动竞赛口号
2014/06/16 职场文书
2014党员民主评议个人思想剖析发言
2014/09/19 职场文书
单位委托书格式范本
2014/09/29 职场文书
中学生社会实践教育活动总结
2015/05/06 职场文书
浅析Python中的套接字编程
2021/06/22 Python
redis调用二维码时的不断刷新排查分析
2022/04/01 Redis
《帝国时代4》赛季预告 新增内容编译器可创造地图
2022/04/03 其他游戏
德劲DE1107指针试高灵敏度全波段收音机机评
2022/04/05 无线电