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学习手册中的python多态示例代码
Jan 21 Python
Python中装饰器的一个妙用
Feb 08 Python
Windows下为Python安装Matplotlib模块
Nov 06 Python
网站渗透常用Python小脚本查询同ip网站
May 08 Python
Python断言assert的用法代码解析
Feb 03 Python
django session完成状态保持的方法
Nov 27 Python
python+webdriver自动化环境搭建步骤详解
Jun 03 Python
python3 selenium自动化测试 强大的CSS定位方法
Aug 23 Python
python 经典数字滤波实例
Dec 16 Python
解决Tensorflow 内存泄露问题
Feb 05 Python
mac系统下安装pycharm、永久激活、中文汉化详细教程
Nov 24 Python
解决Pytorch修改预训练模型时遇到key不匹配的情况
Jun 05 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
基于PHP5魔术常量与魔术方法的详解
2013/06/13 PHP
ThinkPHP模板范围判断输出In标签与Range标签用法详解
2014/06/30 PHP
图解找出PHP配置文件php.ini的路径的方法
2014/08/20 PHP
laravel容器延迟加载以及auth扩展详解
2015/03/02 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
解决laravel查询构造器中的别名问题
2019/10/17 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
Javascript中Eval函数的使用
2010/03/23 Javascript
js call方法详细介绍(js 的继承)
2013/11/18 Javascript
使用jquery中height()方法获取各种高度大全
2014/04/02 Javascript
jquery中获取元素里某一特定子元素的代码
2014/12/02 Javascript
JavaScript父子窗体间的调用方法
2015/03/31 Javascript
解析JavaScript中的字符串类型与字符编码支持
2016/06/24 Javascript
微信小程序 支付简单实例及注意事项
2017/01/06 Javascript
jQuery实现鼠标跟随效果
2017/02/20 Javascript
angularjs实现天气预报功能
2020/06/16 Javascript
js实现rem自动匹配计算font-size的示例
2017/11/18 Javascript
解决vue下载后台传过来的乱码流的问题
2020/12/05 Vue.js
[01:19:54]DOTA2上海特级锦标赛主赛事日 - 2 败者组第二轮#1Alliance VS EHOME
2016/03/03 DOTA
[02:49:21]2019完美盛典全程录像
2019/12/08 DOTA
python使用os.listdir和os.walk获得文件的路径的方法
2017/12/16 Python
python的staticmethod与classmethod实现实例代码
2018/02/11 Python
python 获取utc时间转化为本地时间的方法
2018/12/31 Python
Python 图像处理: 生成二维高斯分布蒙版的实例
2019/07/04 Python
Django 开发环境配置过程详解
2019/07/18 Python
python excel转换csv代码实例
2019/08/26 Python
python numpy存取文件的方式
2020/04/01 Python
TensorFlow tf.nn.max_pool实现池化操作方式
2020/01/04 Python
详解基于canvas的视频遮罩插件
2018/01/04 HTML / CSS
教育专业个人求职信
2013/12/02 职场文书
总经理工作职责范文
2014/03/14 职场文书
医学求职信
2014/05/28 职场文书
2014年新农村建设工作总结
2014/12/01 职场文书
2015年销售员工作总结范文
2015/04/07 职场文书
2015年医药代表工作总结
2015/04/25 职场文书
CSS3实现的3D隧道效果
2021/04/27 HTML / CSS