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标准库内置函数complex介绍
Nov 25 Python
Python贪吃蛇游戏编写代码
Oct 26 Python
Python 将pdf转成图片的方法
Apr 23 Python
python3中zip()函数使用详解
Jun 29 Python
解决python3 安装不了PIL的问题
Aug 16 Python
python使用socket实现的传输demo示例【基于TCP协议】
Sep 24 Python
python3中的eval和exec的区别与联系
Oct 10 Python
TensorFlow MNIST手写数据集的实现方法
Feb 05 Python
Python venv虚拟环境配置过程解析
Jul 08 Python
Python selenium爬取微信公众号文章代码详解
Aug 12 Python
如何使用Python提取Chrome浏览器保存的密码
Jun 09 Python
一文搞懂Python Sklearn库使用
Aug 23 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
最小化数据传输――在客户端存储数据
2006/10/09 PHP
laravel 解决路由除了根目录其他都404的问题
2019/10/18 PHP
thinkphp 框架数据库切换实现方法分析
2020/05/18 PHP
一个javascript参数的小问题
2008/03/02 Javascript
location.href语句与火狐不兼容的问题
2010/07/04 Javascript
js 通用订单代码
2013/12/23 Javascript
在jquery boxy中添加百度地图坐标拾取注意流程
2014/04/03 Javascript
Js使用WScript.Shell对象执行.bat文件和cmd命令
2014/12/18 Javascript
jQuery实现简单的日期输入格式化控件
2015/03/12 Javascript
JS实现Fisheye效果动感放大菜单代码
2015/10/21 Javascript
JS模拟按钮点击功能的方法
2015/12/22 Javascript
图文详解Heap Sort堆排序算法及JavaScript的代码实现
2016/05/04 Javascript
JQuery手速测试小游戏实现思路详解
2016/09/20 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
深入理解angular2启动项目步骤
2017/07/15 Javascript
使用JS编写的随机抽取号码的小程序
2017/08/11 Javascript
es6中的解构赋值、扩展运算符和rest参数使用详解
2017/09/28 Javascript
vue.js vue-router如何实现无效路由(404)的友好提示
2017/12/20 Javascript
nodejs使用socket5进行代理请求的实现
2020/02/21 NodeJs
vue路由权限校验功能的实现代码
2020/06/07 Javascript
python difflib模块示例讲解
2017/09/13 Python
Python+OpenCV图片局部区域像素值处理改进版详解
2019/01/23 Python
Django实现微信小程序的登录验证功能并维护登录态
2019/07/04 Python
python实现最速下降法
2020/03/24 Python
django中嵌套的try-except实例
2020/05/21 Python
Python虚拟环境的创建和使用详解
2020/09/07 Python
使用 css3 transform 属性来变换背景图的方法
2019/05/07 HTML / CSS
让IE下支持Html5的placeholder属性的插件
2014/09/02 HTML / CSS
新加坡最佳婴儿用品店:Mamahood.com.sg
2018/08/26 全球购物
四风问题个人对照检查剖析材料
2014/09/27 职场文书
2015年新学期寄语
2015/02/26 职场文书
2015年大学学生会工作总结
2015/05/13 职场文书
雷锋之歌观后感
2015/06/10 职场文书
有关西游记的读书笔记
2015/06/25 职场文书
《田忌赛马》教学反思
2016/02/19 职场文书
Flask使用SQLAlchemy实现持久化数据
2021/07/16 Python