美文网首页程序员
BeautifulSoup爬虫入门

BeautifulSoup爬虫入门

作者: Minka__ | 来源:发表于2019-02-25 19:15 被阅读0次

    01

    初识BeautifulSoup

    [1]scrapy学会了,这里理解起来很容易,大同小异罢了.将返回的response.read用解析器进行解析,学习一下beautifulsoup库如何筛选数据,也就是如何找到标签,标签的属性,文本这些.下面图中列出了常用的几个用法,之后实例中再补充.

    [2]:find_all()的结果以列表的形式输出,所以可以遍历(循环).

    可以看到,第一个li标签就是啥也没有,列表的每一个元素都以逗号隔开,之所以print换行是因为\n的缘故.

    [3]:提取文本和属性值

    提取属性值:直接在标签后面加上'属性名']就可以了,点取标签(直接就是soup.a这样形式)或者find()都可以.这里不能使用find_all(),因为它的输出是列表,后面加[]会被当成索引处理,报错.

    分隔符只是为了证明两种写法都可以提取出href的属性值

    提取文本:get_text() 和string

    看一眼这个get_text()的说明,也就知道我后面bug产生的原因了(因为返回的是unicode字符串~)

    调用这个方法,当前标签里的所有子孙tag的文本内容也提取出来了

    可以看出,string的条件更为苛刻,最好是定位到当前标签,才能提取到文本.这里只需要知道一个概念就是在bs4中,文本也是一种节点,叫做NavigableString节点.

    解释地明明白白!

    关于bs4的用法有很多,像parents,siblings等等,还是慢慢探索吧~

    [reference]BeautifulSoup的中文说明文档

    https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.zh.html

    02

    爬虫脚本详解

    目前还不太熟悉在多个函数中游走,所以只简单的用了一个类,而且这个例子很简单,也没翻页,也没加headers和代理ip,只需要把结果写入文件就可以了.

    03

    学习过程中的bug

    [1]:运行过程中出现了这个问题,这个问题的解决方法网上可以直接查到,当然,这个一看就是编码方式出的问题,可以通过修改sys的setdefaultencoding('utf8')解决这个问题,但是一般我们python文件开头就已经指明了-*-conding:utf-8

    -*-,为什么不是按照utf8编码,而又成了默认的ascii编码了呢?后来我发现这个问题是因为写入文件导致的.(python都是将字符串解码为unicode再编码的,意思是只有当unicode对象是中文时写入才会报错)

    前面加u就代表后面内容是一个unicode对象.

    以上例子说明,终端的中文输出没有问题的,但是写入文件时的中文就会报这个错误,此时需要我们再次指定编码方式.你可以修改sys,也可以直接在输出的变量后面加上.encode('utf8')就可以了.

    欢迎关注我的公众号:听见我的voices

    相关文章

      网友评论

        本文标题:BeautifulSoup爬虫入门

        本文链接:https://www.haomeiwen.com/subject/jijurqtx.html