日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

BeautifulSoup详解

發(fā)布時(shí)間:2023/12/20 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BeautifulSoup详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.


文章目錄

        • 1.下載安裝
        • 2.導(dǎo)入
        • 3.裝載HTML文檔
        • 4.將文檔數(shù)轉(zhuǎn)換成字符串格式
        • 5.BeautifulSoup查找文檔元素
        • 6.BeautifulSoup遍歷文檔樹
        • 7.BeautifulSoup使用css語法查找元素
        • 9.字符編碼問題
        • 8.實(shí)例:爬取中國(guó)天氣網(wǎng)數(shù)據(jù)蘭州7天的

1.下載安裝

pip install bs4

2.導(dǎo)入

from bs4 import BeautifulSoup as bs

3.裝載HTML文檔

soup = bs(doc, 'lxml') #doc是一個(gè)HTML文檔字符串,可以自動(dòng)補(bǔ)全 lxml是指定該文檔的解析方式 python自帶的解析器是parser

4.將文檔數(shù)轉(zhuǎn)換成字符串格式

soup.prettify()

5.BeautifulSoup查找文檔元素

(1)find() 查找一個(gè)元素節(jié)點(diǎn),返回第一個(gè)滿足要求的節(jié)點(diǎn)信息
(2)find_all()

find_all(self, name=None, attrs={}, recursive=True, text=None, limit=None, **kwargs)

self表明它是一個(gè)類成員函數(shù);name是要查找的標(biāo)簽元素名稱;attrs表示元素的屬性,一個(gè)字典;recursive是默認(rèn)True,全范圍查找該節(jié)點(diǎn)下面的子樹;…
(3)返回的都是列表,每個(gè)元素都是一個(gè)bs4.element.Tag對(duì)象
(4)獲取包含的文本值:tag.text

6.BeautifulSoup遍歷文檔樹

tag.parent:獲取tag節(jié)點(diǎn)的父節(jié)點(diǎn) tag.children:獲取tag節(jié)點(diǎn)的所有子節(jié)點(diǎn),包括element,text等類型的子節(jié)點(diǎn) tag.desendants:獲取tag節(jié)點(diǎn)的所有子孫節(jié)點(diǎn),包括element,text等類型的子節(jié)點(diǎn) tag.next_sibling:tag臨近的下一個(gè)兄弟節(jié)點(diǎn) tag.previous_sibling:tag臨近的前一個(gè)兄弟節(jié)點(diǎn)

7.BeautifulSoup使用css語法查找元素

(1)tag.select(css):tag是HTML文檔中的一個(gè)元素節(jié)點(diǎn)
css一般結(jié)構(gòu):[tagName][attName][=value] 全是可選的,表示元素名稱,元素屬性,元素屬性的值
(2)屬性的語法:
[attName]選取帶有指定屬性的每個(gè)元素
[attName=value]選取帶有指定屬性和值的每個(gè)元素
[aattName^=value]:匹配屬性值以value開頭的每個(gè)元素
[attName$=value]:匹配屬性值以value結(jié)尾的每個(gè)元素
[attName*=value]:匹配屬性值包含value的每個(gè)元素
(3)遍歷:
css有多個(gè)節(jié)點(diǎn)時(shí),空格分開:
soup.select("div p"):查找div節(jié)點(diǎn)下所有子孫p節(jié)點(diǎn)的信息
soup.select("div > p"):查找div節(jié)點(diǎn)下所有直接子節(jié)點(diǎn)p的信息
soup.select("div ~ p"):查找div后面所有同級(jí)別兄弟節(jié)點(diǎn)p的信息
soup.select("div + p"):查找前一個(gè)節(jié)點(diǎn)后面所有同級(jí)別兄弟節(jié)點(diǎn)的信息

9.字符編碼問題

import urllib.requestfrom bs4 import BeautifulSoup as bsfrom bs4 import UnicodeDammitdata = urllib.request.urlopen(url)data=data.read()dammit = UnicodeDammit(data,['gbk','utf-8'])data = dammit.unicode_markupsoup = bs(data,'lxml')tags = soup.select("div[class='屬性值'] span.....")for tag in tags:print(tag)

8.實(shí)例:爬取中國(guó)天氣網(wǎng)數(shù)據(jù)蘭州7天的


import requests from bs4 import BeautifulSoup headers = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) \AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.90 Mobile Safari/537.36'} allUrl="http://www.weather.com.cn/weather/101160101.shtml" response = requests.get(url=allUrl,headers = headers) response.encoding="utf-8" html = response.text soup = BeautifulSoup(html, "html.parser") lis = soup.select("ul[class='t clearfix'] li") for li in lis:try:date = li.select('h1')[0].textweather = li.select('p[class="wea"]')[0].texttemp = li.select('p[class="tem"] span')[0].text + "/" + li.select('p[class="tem"] i')[0].textprint(date, weather, temp)except Exception as err:print(err)》》》》》》有個(gè)問題,超出索引 我沒找到錯(cuò) 大佬找到了幫忙說一下 list index out of range 25日(明天) 陰轉(zhuǎn)多云 15/626日(后天) 晴 19/827日(周二) 多云 18/628日(周三) 多云轉(zhuǎn)晴 19/729日(周四) 晴 21/730日(周五) 晴轉(zhuǎn)多云 30/12℃Process finished with exit code 0

總結(jié)

以上是生活随笔為你收集整理的BeautifulSoup详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。