使用Python开发Web爬虫的笔记

2019-06-01  本文已影响0人  伪学识青年

1.

python3使用urllib包(标准库,不需要额外下载)

urllib包中主要使用以下三大块:

1.request

2.parse

3.Error

同时加上BeautifulSoup4进行html的解析和内容提取

若使用颜色来判断页面中的正文,那么可能只会将红色文本识别为正文,绿色文本则不会识别。

例如以下代码:

NameList=bsObj.findAll(“span”,{ “class”: “red”})

For name in NameList:

        Print(name.get_text())

2.

findAll(tag,attributes,recursive,text,limit,keywords)

find(tag,attributes,recursive,text,keywords)

若将findAll的recursive的值设置为True,则该方法将会搜寻该节点下满足条件的子节点,子节点的子节点……,

若将recursive的值设置为False,该方法将只会在文档中搜索当前同等级的其他节点。默认,findAll将会递归搜索各个子节点(recursive设置为True)

nameList=bsObj.findAll(text=“the price”)

limit选项只用于findAll方法中,find方法与findAll方法在功能上是相同的,只是find方法是findAll方法将limit设置为1的结果。若只希望提取头X个出现并满足条件的条目,则可以使用find方法。例:

allText=bsObj.findAll(id=‘text’)

Print(allText[0].get_text())

3.

因为class是python中的一个关键字,因此class在python中是一个保留字,因此class不能被用于变量名。

例如:

bsObj.findAll(class=‘green’)

是错误的

bsObj.findAll(class_=‘green’)

则是正确的

你也可以使用以下的表述方法:

bsObj.findAll(“”,{“class”: “green”})

4.

Images=bsObj.findAll(“img”,{“src”:re.compile(“../../img/*.jpg”)})

Soup.findAll(lambda tag:len(tag.attrs)==2)

以上代码将会搜寻以下结构的节点:

<div class=“body” id=“content”></div>

<span style=“color:red” class=“title”></span>

为了避免爬取之前爬取过的页面,因此将爬取过的网页链接规则化的保存,并且要确保当前保存的链接在程序运行时容易查询。只有对之前没有爬取过的页面链接才进行爬取,简单网页代码如下:

上一篇下一篇

猜你喜欢

热点阅读