Python3爬虫学习笔记(4.BeautifulSoup库详解)

这是一个功能强大的库,可以代替很多需要写正则的地方

这是一个第三方解析库,常规安装方法:

调出cmd:pip install bs4


简单了解:

html = """

    
    TITLE


    /
                            
第一行,第1列 第一行,第2列 第一行,第3列
""" from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'lxml') #自动补全修正html文本 print(soup.prettify()) #获得html的标题 print(soup.title.string)


标签选择器:

html = """

    
    TITLE


    /
                            
第一行,第1列 第一行,第2列 第一行,第3列
""" from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'lxml') print(soup.title) #TITLE print(soup.head) ''' TITLE ''' print(soup.td) #只能获取第一个,所以打印:第一行,第1列

获取属性:

html = """

    
    666


    /
                            
第一行,第1列 第一行,第2列 第一行,第3列
""" from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'lxml') print(soup.table["border"]) #1

获取内容:

html = """

    
    666


                                
第一行,第1列 第一行,第2列 第一行,第3列
""" from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'lxml') print(soup.table.tr.td.string) #第一行,第1列

子节点:

html = """

    
    666


                                
第一行,第1列 第一行,第2列 第一行,第3列
""" from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'lxml') print(soup.table.tr.contents) #['\n', 第一行,第1列, '\n', 第一行,第2列, '\n', 第一行,第3列, '\n']
另外一种:

html = """

    
    666


                                
第一行,第1列 第一行,第2列 第一行,第3列
""" from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'lxml') for i, child in enumerate(soup.table.tr.children): print(i, child) ''' 0 1 第一行,第1列 2 3 第一行,第2列 4 5 第一行,第3列 6 可以看出.children实际上是一个迭代器。 '''

子孙节点:

html = """

    
    666


                                
第一行,第1列 第一行,第2列 第一行,第3列
""" from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'lxml') for i, child in enumerate(soup.table.descendants): print(i, child) ''' 0 1 第一行,第1列 第一行,第2列 第一行,第3列 2 3 第一行,第1列 4 第一行,第1列 5 6 第一行,第2列 7 第一行,第2列 8 9 第一行,第3列 10 第一行,第3列 11 12 '''

父节点:

html = """

    
    666


                                
第一行,第1列 第一行,第2列 第一行,第3列
""" from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'lxml') print(soup.tr.parent) '''
第一行,第1列 第一行,第2列 第一行,第3列
'''

兄弟节点:

html = """

    
    666


                                
第一行,第1列 第一行,第2列 第一行,第3列
""" from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'lxml') print(list(enumerate(soup.td.next_siblings))) #[(0, '\n'), (1, 第一行,第2列), (2, '\n'), (3, 第一行,第3列), (4, '\n')] print(list(enumerate(soup.td.previous_siblings))) #[(0, '\n')]

标准选择器(实用):

find_all详解:

html = """

    
    666


                                
第一行,第1列 第一行,第2列 第一行,第3列
""" from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'lxml') print(soup.find_all("td")) #[第一行,第1列, 第一行,第2列, 第一行,第3列] #可以遍历输出,这里不写了(td标签里面的内容是后边临时加的) print(soup.find_all(attrs={ "id": "1"})) #[第一行,第1列](临时加的id) print(soup.find_all(id="1")) #[第一行,第1列] print(soup.find_all(class_="c1")) #[第一行,第2列](临时加的class) #注意这里要加上下划线 print(soup.find_all(text="第一行,第3列")) #['第一行,第3列']

find方法类似,只不过是把find_all方法获取的列表里面的第一个元素拿出来了,这里就不仔细写了。


CSS选择器:

html = """

    
    666


                                
第一行,第1列 第一行,第2列 第一行,第3列
""" from bs4 import BeautifulSoup soup = BeautifulSoup(html, 'lxml') print(soup.select("tr td")) #[第一行,第1列, 第一行,第2列, 第一行,第3列] print(soup.select(".c0 .c1")) #[第一行,第2列] print(soup.select("#0 .c1")) #[第一行,第2列] for td in soup.select("td"): print(td["id"]) #临时加入的三个id,会遍历输出1,2,3 for td in soup.select("td"): print(td.get_text()) """ 第一行,第1列 第一行,第2列 第一行,第3列 """



你可能感兴趣的:(Python爬虫,python,爬虫)