我已经设法公开了正确的数据(其中一些是在页面中即时计算的,所以比我想象的要复杂一些)但我现在需要将其放入 JSON 字符串中,尽管进行了多次尝试,但我还是被卡住了!
这个 Python 脚本如下(使用 Selenium & BeautifulSoup):
from bs4 import BeautifulSoup
from selenium import webdriver
import datetime
from dateutil import parser
import requests
import json
url = 'https://www.braintree.gov.uk/bins-waste-recycling/route-3-collection-dates/1'
browser = webdriver.Chrome(executable_path = r'C:/Users/user/Downloads/chromedriver.exe')
browser.get(url)
html = browser.execute_script("return document.getElementsByTagName('html')[0].innerHTML")
soup = BeautifulSoup(html, "html.parser")
data=soup.find_all("div", {"class":"date_display"})
#print(data)
#out = {}
for data in data:
bin_colour = data.find('h3').text
bin_date = parser.parse(data.find('p').text).strftime('%Y-%m-%d')
print(bin_colour)
print(bin_date)
print()
browser.quit()
这导致:Grey Bin
2021-06-30
Green Bin
2021-06-23
Clear Sack
2021-06-23
Food Bin
2021-06-23
它可能(可能)不是最好的代码/方法,所以我愿意接受您的建议。最终的主要目标是:{"Grey Bin": "2021-06-30", "Green Bin": "2021-06-23", "Clear Sack": "2021-06-23", "Food Bin": "2021-06-23"}
希望这是有道理的,我已经尝试了各种方法来将数据转换为正确的格式,但经过数小时的尝试后似乎丢失了所有数据,我希望你们能提供帮助。更新:
MendelG 的两种解决方案都运行良好。 Vitalis 的解决方案提供了四个输出,最后一个是所需的输出 - 所以感谢你们非常快速和有效的解决方案 - 我很接近,但看不到树木的木材!
最佳答案
要以字典格式获取数据,您可以尝试:
out = {}
for data in tag:
out[data.find("h3").text] = parser.parse(data.find("p").text).strftime("%Y-%m-%d")
print(out)
或者,使用字典理解:print(
{
data.find("h3").text: parser.parse(data.find("p").text).strftime("%Y-%m-%d")
for data in tag
}
)
输出:{'Grey Bin': '2021-06-30', 'Green Bin': '2021-06-23', 'Clear Sack': '2021-06-23', 'Food Bin': '2021-06-23'}
关于python - Web Scraping - 试图提取一些数据,但卡在最后的障碍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68038019/