[英]web scraping a certain row from a table
我正在努力從這個網站上抓取某一行。
首先,表格元素中沒有 class 但我想我有一個解決方法。
我的問題是我想打印(或存儲在變量中或訪問數據)某行,假設第一個值“Bollate”的行:網站中該行的屏幕截圖
所以我編碼:
import requests
import bs4
URL = "http://www.centrometeolombardo.com/content.asp?CatId=332&ContentType=Dati"
response = requests.get(URL)
soup = bs4.BeautifulSoup(response.text, "lxml")
table = soup.find(text="Bollate").find_parent("table")
for a in table:
if a.text == "Bollate":
for val in a.parent-find_next_siblings():
print(val.text)
但我得到:
Traceback (most recent call last):
File "/home/pi/Documents/Python/ngu.py", line 12, in <module>
if a.text == "Bollate":
File "/usr/lib/Python3/dist-packages/bs4/element.py", line 370, in _getattr_
self._class_._name_, attr))
AttributeError: 'NavigableString' object has no attribute 'text'
這表明我錯了,因為我得到的東西不是文本,但我不知道如何克服這個問題。
謝謝大家
您可以使用:contains 和:has 隔離行,以確保 b 標記帶有該文本在 tr 中。 您還需要定位正確的嵌套表,例如使用 nth-child
import requests
from bs4 import BeautifulSoup
page_source = requests.get('http://www.centrometeolombardo.com/content.asp?CatId=332&ContentType=Dati').text
soup = BeautifulSoup(page_source, 'lxml')
print([td.get_text(strip=True) for td in soup.select('div:nth-child(5) table:nth-child(3) tr:has(b:contains("Bollate")) td')])
感謝@SIM 指出可以通過使用以下模式來避免對索引進行硬編碼:
soup.select("table > tr:has(> td > a:contains('Bollate')) td")
您可以使用pandas
抓取HTML
並解析表。 然后只需 select 您需要的值。
就是這樣:
import pandas as pd
url = "http://www.centrometeolombardo.com/content.asp?CatId=332&ContentType=Dati"
df = pd.read_html(url, flavor="bs4")[19]
print(df.loc[df[0] == "Bollate"])
Output:
0 1 2 3 4 5
2 Bollate -0.3 12.3 Brina - -
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.