本帖最后由 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的 所以直接乱码了,我们给他设定一个返回编码
这样就OK了然后我们进入了Beautifulsoup的使用,我是初学者,这个框架不是很会用,html的基础知识也不是很扎实,大家凑活看吧。
- html = BeautifulSoup(res.text)
- for link in html.find_all('div',{'class':'txt-box'}):
- link = link.find('a')
- title = link.string
复制代码
我在写出这段代码之前,测试了很多种方法,最终发现, 在DIV中查询,Class = txt-box 的 数据,最终返回的肯定是我们想要的a标签内容,但是我在 使用 find_all() 出现了一个误区,我忘记了这个返回的是盒子,而不是单个,所以我又在下面进行了find的查询a标签的操作,最终得出了我想要的结果, 标题 以及 链接 都是A标签带的。 当然了,我也想一行代码解决这个 内容提取的问题,但是了解的不多,所以没办法了。
现在 以及成功的取出了遍历21遍的里面所有的标题和链接了。任务完成啦。
下方是我的代码 文档在最后:
- # coding:utf-8
- import sys
- reload(sys)
- sys.setdefaultencoding("utf-8")
- import requests
- import time
- from bs4 import BeautifulSoup
- fr = open('sogou.txt','a+')
- tj=[]
- for i in xrange(1,22):
- url = "http://weixin.sogou.com/pcindex/pc/pc_"+str(i)+"/pc_"+str(i)+".html"
- res = requests.get(url)
- res.encoding = 'utf8' # 设置返回的内容的编码
- html = BeautifulSoup(res.text)
- for link in html.find_all('div',{'class':'txt-box'}):
- link = link.find('a')
- title = link.string
- if title == "":
- print "第:"+str(i)+"页 采集失败"
- wxurl = link.get('href')
- fr.write(title+"----"+wxurl+"\n")
- tj.append(title)
- print "第:"+str(i)+"页数据采集完毕"
- print "微信全部数据采集完毕 共:"+str(len(tj))
- 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/ 得到的文档。
|