精易论坛

标题: 初用requests 及 Beautifulsoup 写的搜狗微信文章爬虫 [打印本页]

作者: 青舟    时间: 2017-9-27 22:18
标题: 初用requests 及 Beautifulsoup 写的搜狗微信文章爬虫
本帖最后由 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:42
我来了,只好说一句真话来表达对楼主的敬意,楼主,你是女的吗?是女的就嫁给我吧 --
作者: 中楠海保镖    时间: 2017-9-27 23:04
我也才接触Python 我被他的文本处理的强大所以征服
作者: 代码之殇    时间: 2017-9-27 23:06
羡慕楼主大神的技术 纯技术流
作者: 零点丶    时间: 2017-9-27 23:08
心宿
作者: 青舟    时间: 2017-9-27 23:28
@MY寂寞的夜  所以是学习笔记了。。也没装逼啊。
作者: 桃花仙人    时间: 2017-10-2 09:58
Python2都要被官方淘汰了,还是飞快转到Python3吧
作者: boood    时间: 2017-10-22 18:52
用bs4.get_text()直接取网页里的文本内容,前后一截字符串,爬小说省事




欢迎光临 精易论坛 (https://125.confly.eu.org/) Powered by Discuz! X3.4