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爬虫之神器正则表达式
Nov 06 Python
python实战之实现excel读取、统计、写入的示例讲解
May 02 Python
Django框架实现的简单分页功能示例
Dec 04 Python
python_opencv用线段画封闭矩形的实例
Dec 05 Python
python多线程下信号处理程序示例
May 31 Python
python3+django2开发一个简单的人员管理系统过程详解
Jul 23 Python
基于python的BP神经网络及异或实现过程解析
Sep 30 Python
Python爬虫:Request Payload和Form Data的简单区别说明
Apr 30 Python
Python中logger日志模块详解
Aug 04 Python
python em算法的实现
Oct 03 Python
python 进程池pool使用详解
Oct 15 Python
python中requests库+xpath+lxml简单使用
Apr 29 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 文本文件的读取效率
2012/02/10 PHP
Php header()函数语法及使用代码
2013/11/04 PHP
php对数组排序代码分享
2014/02/24 PHP
linux使用crontab实现PHP执行计划定时任务
2014/05/10 PHP
PHP远程采集图片详细教程
2014/07/01 PHP
PHP实现UTF-8文件BOM自动检测与移除实例
2014/11/05 PHP
PHP积分兑换接口实例
2015/02/09 PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
2015/12/21 PHP
Yii2.0多文件上传实例说明
2017/07/24 PHP
Yii框架学习笔记之应用组件操作示例
2019/11/13 PHP
TP5框架实现自定义分页样式的方法示例
2020/04/05 PHP
jquery animate图片模向滑动示例代码
2011/01/26 Javascript
js写一个弹出层并锁屏效果实现代码
2012/12/07 Javascript
ie下$.getJSON出现问题的解决方法
2014/02/12 Javascript
JS设置cookie、读取cookie、删除cookie
2015/04/17 Javascript
完美JQuery图片切换效果的简单实现
2016/07/21 Javascript
Ajax实现不刷新取最新商品
2017/03/01 Javascript
原生js实现简单的Ripple按钮实例代码
2017/03/24 Javascript
Angular实现搜索框及价格上下限功能
2018/01/19 Javascript
详解vue+webpack+express中间件接口使用
2018/07/17 Javascript
JS实现购物车基本功能
2020/11/08 Javascript
用python分割TXT文件成4K的TXT文件
2009/05/23 Python
PHP webshell检查工具 python实现代码
2009/09/15 Python
Python中的CURL PycURL使用例子
2014/06/01 Python
python连接mysql实例分享
2016/10/09 Python
python查看模块安装位置的方法
2018/10/16 Python
Python read函数按字节(字符)读取文件的实现
2019/07/03 Python
pycharm通过anaconda安装pyqt5的教程
2020/03/24 Python
HTML5之WebGL 3D概述(上)—WebGL原生开发开启网页3D渲染新时代
2013/01/31 HTML / CSS
html5借用repeating-linear-gradient实现一把刻度尺(ruler)
2019/09/09 HTML / CSS
电子信息专业自荐书
2014/02/04 职场文书
大学运动会入场词
2014/02/22 职场文书
精神文明单位申报材料
2014/05/02 职场文书
2014教师研修学习体会
2014/07/08 职场文书
农村婚庆主持词
2015/06/29 职场文书
Vue3实现简易音乐播放器组件
2022/08/14 Vue.js