BeautifulSoup 总结

BeautifulSoup是Python的一个库,最主要的功能就是从网页爬取我们需要的数据。
BeautifulSoup将html解析为对象进行处理,全部页面转变为字典或者数组,

相对于正则表达式的方式,可以大大简化处理过程。

BeautifulSoup总结:

BeautifulSoup的三种解析方式:

soup1 = BeautifulSoup(html, "lxml")  # lxml解析方式 速度快容错能力强
soup2 = BeautifulSoup(html, "html.parser")  # 常规网页解析方式 python内置标准库,执行速度快
soup3 = BeautifulSoup(html, "html5lib")  # html5解析方式 以浏览器方式解析最好容错性  速度慢

结合requests 读取网页内容之后利用BeautifulSoup变成一个soup对象:

response = requests.get("http://www.youzi4.cc/")#请求url 
html=response.text #读取网页源代码
soup=BeautifulSoup(html,"html.parser")#常规网页解析方式 python内置标准库,执行速度快

利用soup对象进行网页内容提取:

print(soup.head)

head为要提取元素的标签,可以是任意标签(head 、body、title、a、p、img等),只能提取最先出现的一个。

print(soup.find_all("a")) #在网页中提取所有的a标签 是一个列表list类型
for link in soup.find_all("a"): #循环遍历所有的a标签
    #print(link)
    #print(link.get("href")) #取出a标签中所有的链接
    print(link["href"]) #取出a标签中所有的链接 与上部一样

soup.find("所要提取的标签") 提取出标签之后会是一个列表类型的,可以用for语句循环遍历输出,另外中括号【】里面是所要提取标签之间属性的属性值。

还有一个重要的方法select方法:

print(soup.select("li"))
for link in soup.select("li"):  # 循环遍历a标签
    print(link)
print(soup.select(".IndexListUnion_3")) #根据class属性去选取标签之间的内容打印全部是一个list类型
for data in soup.select(".IndexListUnion_3"): 
    print(data)
print(soup.select("#AutoTagHeight_0")) #根据ID去选取内容
for data in soup.select("#AutoTagHeight_0"): #循环遍历
    print(data)

select方法可以选择标签、属性值

soup.select("所要选取的标签") 标签取出后也是一个list类型,可以for循环遍历输出

如果遇到如下:

    可以利用soup.select(".BannerTagList")或者soup.select("#AutoTagHeight_0")选取

    注意:class的属性值要用 .后加属性值 ID的属性值要用 #加属性值

    html 是一段从网页中读取的网页数据。

    读取网页具体示例:

    #coding:utf-8
    from bs4 import BeautifulSoup
    import requests
    from requests import exceptions
    
    try:
        url = "http://www.youzi4.cc/" #所要请求的网址
        response = requests.get(url,timeout=5)#请求url 若超过5秒便自动放弃
        print(response.status_code)#打印网页状态码
        html=response.text #读取网页源代码
        soup1=BeautifulSoup(html,"html.parser")#常规网页解析方式 python内置标准库,执行速度快
        soup2 = BeautifulSoup(html, "lxml")  # lxml解析方式 速度快容错能力强
        soup3 = BeautifulSoup(html, "html5lib")  # html5解析方式 以浏览器方式解析最好容错性  速度慢
        print(soup1.prettify()) #打印soup1中对象的内容格式化输出
    except requests.exceptions.ConnectionError as e: #进行错误处理并输出原因
        print(e)
    

    利用Beautiful创建的对象是类型,此类型可以利用内置的方法打印所要内容。

    选择简单元素示例:

    #coding:utf-8
    from bs4 import BeautifulSoup
    import requests
    from requests import exceptions
    
    try:
        url = "http://www.youzi4.cc/" #所要请求的网址
        response = requests.get(url,timeout=5)#请求url 若超过5秒便自动放弃
        print(response.status_code)#打印网页状态码
        html=response.text #读取网页源代码
        soup=BeautifulSoup(html,"html.parser")#常规网页解析方式 python内置标准库,执行速度快
        print(type(soup))#soup的类型
        title = soup.title #选择网站的title标题
        # 提取title标签    美女图片_美女写真_性感美女_mm图片大全_人体艺术照_爆乳美女 - 优姿美女
        print(title)
        # 提取title标签之间的文本 美女图片_美女写真_性感美女_mm图片大全_人体艺术照_爆乳美女 - 优姿美女
        print(title.string) 
        #选择body
        body = soup.body
        print(body) #打印body的内容
        #提取a标签 网页中会有多个a标签默认只提取第一个
        print(soup.a)
        print(soup.a.attrs) #将a标签中的属性值打印出来 类型为字典类型
        print(soup.a["href"]) #将a标签中的href属性打印出来
        print(soup.find_all("a")) #在网页中提取所有的a标签 是一个列表list类型
        for link in soup.find_all("a"): #循环遍历所有的a标签
            #print(link)
            #print(link.get("href")) #取出a标签中所有的链接
            print(link["href"]) #取出a标签中所有的链接 与上部一样
    except requests.exceptions.ConnectionError as e: #进行错误处理并输出原因
        print(e)
    

    select方法:

    for link in soup.select("a"): #循环遍历a标签
         print(link)
    print(soup.select("li"))
    for link in soup.select("li"):  # 循环遍历a标签
         print(link)
    print(soup.select(".IndexListUnion_3")) #根据class属性去选取标签之间的内容打印全部是一个list类型
    for data in soup.select(".IndexListUnion_3"): 
         print(data)
    print(soup.select("#AutoTagHeight_0")) #根据ID去选取内容
    for data in soup.select("#AutoTagHeight_0"): #循环遍历
    
      print(data)
    select特殊用法:
    print soup.select("body > p") #body下面直接的p子标签
    print soup.select("p > a")#p下面直接的a子标签
    print soup.select("p > .sister")#p下面直接的class="sister"的子标签

    你可能感兴趣的:(python爬虫学习之路)