我已经在python中创建了一个web scraper但是在最后打印时我想要打印(" Bakerloo:" + info_from_website)我已经下载了,你可以在代码中看到,但它总是就像info_from_website一样出现并忽略" Bakerloo:"串。无论如何都无法解决它。
import urllib
import urllib.request
from bs4 import BeautifulSoup
import sys
url = 'https://tfl.gov.uk/tube-dlr-overground/status/'
page = urllib.request.urlopen(url)
soup = BeautifulSoup(page,"html.parser")
try:
bakerlooInfo = (soup.find('li',{"class":"rainbow-list-item bakerloo "}).find_all('span')[2].text)
except:
bakerlooInfo = (soup.find('li',{"class":"rainbow-list-item bakerloo disrupted expandable "}).find_all('span')[2].text)
bakerloo = bakerlooInfo.replace('\n','')
print("Bakerloo : " + bakerloo)
答案 0 :(得分:2)
我会使用CSS selector来获取disruption-summary
类的元素:
import requests
from bs4 import BeautifulSoup
url = 'https://tfl.gov.uk/tube-dlr-overground/status/'
page = requests.get(url)
soup = BeautifulSoup(page.content, "html.parser")
service = soup.select_one('li.bakerloo .disruption-summary').get_text(strip=True)
print("Bakerloo: " + service)
打印:
Bakerloo: Good service
(在这里使用requests
)。
请注意,如果您只想列出具有中断摘要的所有电台,请执行以下操作:
import requests
from bs4 import BeautifulSoup
url = 'https://tfl.gov.uk/tube-dlr-overground/status/'
page = requests.get(url)
soup = BeautifulSoup(page.content, "html.parser")
for station in soup.select("#rainbow-list-tube-dlr-overground-tflrail-tram ul li"):
station_name = station.select_one(".service-name").get_text(strip=True)
service_info = station.select_one(".disruption-summary").get_text(strip=True)
print(station_name + ": " + service_info)
打印:
Bakerloo: Good service
Central: Good service
Circle: Good service
District: Good service
Hammersmith & City: Good service
Jubilee: Good service
Metropolitan: Good service
Northern: Good service
Piccadilly: Good service
Victoria: Good service
Waterloo & City: Good service
London Overground: Good service
TfL Rail: Good service
DLR: Good service
Tram: Good service