【发布时间】:2020-04-10 10:45:20
【问题描述】:
我正在尝试使用 bs4 解析网页,但我尝试访问的元素都有不同的类名。 示例:class='list-item Listing ... id-12984' 和 class='list-item Listing ... id-10359'
def preownedaston(url):
preownedaston_resp = requests.get(url)
if preownedaston_resp.status_code == 200:
bs = BeautifulSoup(preownedaston_resp.text, 'lxml')
posts = bs.find_all('div', class_='') #don't know what to put here
for p in posts:
title_year = p.find('div', class_='inset').find('a').find('span', class_='model_year').text
print(title_year)
preownedaston('https://preowned.astonmartin.com/preowned-cars/search/?finance%5B%5D=price&price-currency%5B%5D=EUR&custom-model%5B404%5D%5B%5D=809&continent-country%5B%5D=France&postcode-area=United%20Kingdom&distance%5B%5D=0&transmission%5B%5D=Manual&budget-program%5B%5D=pay§ion%5B%5D=109&order=-usd_price&pageId=3760')
有没有办法解析像class_='list-item '这样的部分类名?
【问题讨论】:
-
我认为您的代码甚至没有达到您要查找的元素甚至存在的程度。查看该页面的源代码:
view-source:https://preowned.astonmartin.com/preowned-cars/search/?finance%5B%5D=price&price-currency%5B%5D=EUR&custom-model%5B404%5D%5B%5D=809&continent-country%5B%5D=France&postcode-area=United%20Kingdom&distance%5B%5D=0&transmission%5B%5D=Manual&budget-program%5B%5D=pay&section%5B%5D=109&order=-usd_price&pageId=3760。我在那个源代码中找不到任何list-item,Beautifulsoup 也不会。 -
@Tomalak 我发现两个 div 代表“帖子”(每辆车一个),每个 div 都有一个类似于:'list-item listing usedVehiclesSearch usedvehicles usedcars make-aston-martin model- v12-vantage reg-s00754 location-3d81f6e3a2cfd67ead2b23e36fab68948d711d43 h-3d81f6e3a2cfd67ead2b23e36fab68948d711d43 aston-martin-bordeaux franchise-628fa2b4b3ef528010bde94a132f98717eb30c45 h-628fa2b4b3ef528010bde94a132f98717eb30c45 id-10359'
-
当您查看页面的源代码时不会。您正在浏览器的开发工具中查看实时 DOM,这是一个完全不同的事情。 Beautifulsoup 不会看到这一点,因为所有这些都是 Javascript 生成的,而 Beautifulsoup 不运行任何 Javascript。使用
view-source:链接(复制和粘贴)查看 Beautifulsoup 会看到什么。 -
@Tomalak 谢谢你,我不知道你需要源代码直接解析页面,因为我以前的所有脚本都使用 DOM。我设法找到每辆车的详细信息在哪里,但是如何使用 bs4 访问它们? (抱歉还是很菜)
-
@Tomalak 没关系,其他答案解释得很好,谢谢你的时间
标签: python parsing beautifulsoup