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
网友评论