开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 7819|回复: 12
打印 上一主题 下一主题
收起左侧

[图文教程] 初用requests 及 Beautifulsoup 写的搜狗微信文章爬虫

[复制链接]

结帖率:79% (30/38)
跳转到指定楼层
楼主
发表于 2017-9-27 22:18:36 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式   山西省大同市
本帖最后由 lazy心宿 于 2017-9-27 22:19 编辑

[python学习笔记] 初用requests 及 Beautifulsoup 写的搜狗微信文章爬虫

——————

思路:

        进入搜狗微信的页面,是可以看到有很多的分类,我F12抓包,发现他们有固定的地址,并不是API,如果是API的话肯定要用json的,所以我用了Beautifulsoup 来采集这些数据,也是第一次使用。当然了,网页访问我用了使用简单的 requests 的模块。 下方会提供文档的地址。

我发现每一个分类的地址都是:http://weixin.sogou.com/pcindex/pc/pc_1/pc_1.html 这种地址,原本打算采集看看有多少,但是发现,也就21个分类,所以我直接用了生成器 xrange 生成21次循环就可以了。

有一个小细节,就是文档的返回编码问题 UTF8的 所以直接乱码了,我们给他设定一个返回编码

  1. res.encoding = 'utf8'
复制代码

这样就OK了

然后我们进入了Beautifulsoup的使用,我是初学者,这个框架不是很会用,html的基础知识也不是很扎实,大家凑活看吧。


  1. html = BeautifulSoup(res.text)
  2.     for link in html.find_all('div',{'class':'txt-box'}):
  3.         link = link.find('a')
  4.         title = link.string
复制代码


我在写出这段代码之前,测试了很多种方法,最终发现, 在DIV中查询,Class = txt-box 的 数据,最终返回的肯定是我们想要的a标签内容,但是我在 使用 find_all() 出现了一个误区,我忘记了这个返回的是盒子,而不是单个,所以我又在下面进行了find的查询a标签的操作,最终得出了我想要的结果, 标题 以及 链接 都是A标签带的。 当然了,我也想一行代码解决这个 内容提取的问题,但是了解的不多,所以没办法了。



现在 以及成功的取出了遍历21遍的里面所有的标题和链接了。任务完成啦。


下方是我的代码 文档在最后:


  1. # coding:utf-8
  2. import sys
  3. reload(sys)
  4. sys.setdefaultencoding("utf-8")  
  5. import requests
  6. import time
  7. from bs4 import BeautifulSoup

  8. fr = open('sogou.txt','a+')
  9. tj=[]
  10. for i in xrange(1,22):
  11.     url = "http://weixin.sogou.com/pcindex/pc/pc_"+str(i)+"/pc_"+str(i)+".html"
  12.     res = requests.get(url)
  13.     res.encoding = 'utf8' # 设置返回的内容的编码
  14.     html = BeautifulSoup(res.text)
  15.     for link in html.find_all('div',{'class':'txt-box'}):
  16.         link = link.find('a')
  17.         title = link.string
  18.         if  title == "":
  19.             print "第:"+str(i)+"页 采集失败"   
  20.         wxurl = link.get('href')
  21.         fr.write(title+"----"+wxurl+"\n")
  22.         tj.append(title)
  23.     print "第:"+str(i)+"页数据采集完毕"   

  24. print "微信全部数据采集完毕 共:"+str(len(tj))
  25. fr.close()
复制代码

这里给大家提供一下文档:http://beautifulsoup.readthedocs.io/zh_CN/latest/

文档地址:http://docs.python-requests.org/zh_CN/latest/user/quickstart.html


好厉害的,在使用 Sublime TEXT 2 输出的时候,中途出现了编码错了

第:9页数据采集完毕
[Decode error - output not utf-8]

这个问题之后解决吧。


在其他的IDE暂时没发现错误。

补发地址:http://weixin.sogou.com/

得到的文档。





点评

入门都不及格   安徽省滁州市  发表于 2017-9-27 22:56
8
发表于 2017-10-22 18:52:01 | 只看该作者   江西省南昌市
用bs4.get_text()直接取网页里的文本内容,前后一截字符串,爬小说省事
回复 支持 反对

使用道具 举报

结帖率:85% (17/20)
7
发表于 2017-10-2 09:58:53 | 只看该作者   广东省深圳市
Python2都要被官方淘汰了,还是飞快转到Python3吧
回复 支持 反对

使用道具 举报

结帖率:79% (30/38)

签到天数: 18 天

6
 楼主| 发表于 2017-9-27 23:28:50 | 只看该作者   山西省大同市
@MY寂寞的夜  所以是学习笔记了。。也没装逼啊。
回复 支持 反对

使用道具 举报

结帖率:68% (27/40)
地下
发表于 2017-9-27 23:08:15 | 只看该作者   广东省东莞市
心宿

点评

大佬 有何吩咐   山西省大同市  发表于 2017-9-27 23:29
回复 支持 反对

使用道具 举报

结帖率:50% (2/4)
地板
发表于 2017-9-27 23:06:06 | 只看该作者   浙江省湖州市
羡慕楼主大神的技术 纯技术流

点评

别这样,我是刚学,学习笔记   山西省大同市  发表于 2017-9-27 23:28
回复 支持 反对

使用道具 举报

结帖率:98% (65/66)
板凳
发表于 2017-9-27 23:04:44 高大上手机用户 | 只看该作者   四川省遂宁市
我也才接触Python 我被他的文本处理的强大所以征服

点评

代码的书写也太迷人   山西省大同市  发表于 2017-9-27 23:26
回复 支持 反对

使用道具 举报

沙发
发表于 2017-9-27 22:42:11 | 只看该作者   广西壮族自治区南宁市
我来了,只好说一句真话来表达对楼主的敬意,楼主,你是女的吗?是女的就嫁给我吧 --

点评

纯爷们   山西省大同市  发表于 2017-9-27 22:48
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表