我目前正在刮这个网站,以建立一个汽车数据集,我有一个方程式建立循环通过网站的每一页,而刮。然而,我无法提取文本,我需要使这一工作。
下面的代码片段是我试图刮去的标记。我需要得到现场的车辆数量。
<span class="d-none d-sm-inline">166 Vehicles</span>
这张图片显示了我正在尝试删除的站点元素
下面是我用来刮取该元素的代码:
# Packages
import pandas as pd
import numpy as np
from bs4 import BeautifulSoup
import requests
print("Started web scrape...")
limit = 10
start = 0 #increment by limit
website = requests.get(f'https://www.sosubaru.com/new-inventory/index.htm?start={start}')
soup = BeautifulSoup(website.text, 'html.parser')
inventory_count = soup.select("span.d-none.d-sm-inline")[0].string
print(inventory_count)
此代码返回以下内容:
Started OR_GP_Roe_Motors web scrape...
Traceback (most recent call last):
File "c:/mypath...", line 16, in <module>
inventory_count = soup.select("span.d-none.d-sm-inline")[0].string
IndexError: list index out of range
然后我检查了一下为什么返回soup.select给我的所有内容来得到错误代码:
inventory_count = soup.select("span.d-none.d-sm-inline")
print(inventory_count)
它返回:
Started web scrape...
[]
为什么给我一个空名单?
然后我告诉它打印出网站上的每一个span标签,看看它是否在那里。结果打印出许多span标签,但不包括我正在寻找的一个。为什么我用漂亮的汤检测不出来?是我正在使用的解析器吗?我尝试使用'lxml'作为解析器,但它没有改变任何东西。这与网站是html xmls文档这一事实有关系吗?
我已经刮了几个网站,到现在为止还没有出现过类似这样的问题。
您想要的数据和标记不会出现在html源代码中,这意味着它们是由JavaScript添加的。您可以使用selenium在页面源被呈现之后获取它,也可以使用requests_html,它有一个类似于BeautifulSoup的API,它可以在刮取页面之前呈现页面的javascript。
from requests_html import HTMLSession
s = HTMLSession()
r = s.get(url)
r.html.render()
r.find . . . [whatever you want to search for]