今儿是2019.1.29,今天是学习如何从章节目录里爬出章节信息来。如下图

我们看到章节信息都是包含在一个div层——ul层——a标签下面。我们如何把信息爬出来呢。其实昨天说了有find和find_all函数。由于我们爬的不是单个数据,那么我们决定用find_all函数。
加深印象,删除代码,重新开始敲:

问题1:但是打印的时候,发现打印出来的是<Response [200]>,而不是网页的源代码。后来发现requests.get()方法输出的是网页的对象。而非可打印出来的源代码,所以需要输出时,要print(b.text)
问题2:BeautifulSoup库中的find和find_all函数似乎必须先调用BeautifulSoup函数,然后对函数输出的结果起作用。后来查了大神的回答:

发现这两个函数只对Tag对象起作用,我当前水平暂且认为是带标签的,比如带<div><div/>这种。就可以调用find和find_all函数。调用方法:
find_all( name , attrs , recursive , text , **kwargs )
find( name , attrs , recursive , text , **kwargs )
发现,虽然下列两个打印出来的结果相同

但是c是BeautifulSoup函数输出的Tag对象,所以可以调用find_all函数,而b.text则不行,text属于str类型,和string有点像。不属于Tag对象。我们试着用type()函数打印一下两者的属性如下:

清晰可见,两者不同类型。虽然输出直接看不出来,但是使用type()就会很清楚。
网友评论