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

Lazy心宿 2017-09-27 21:50 1757次浏览

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

——————

思路:

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

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

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

res.encoding = '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/