我正在尝试熟悉请求和BeautifulSoup,所以我给了自己一个迷你项目。我正在尝试制作一个在Footlocker发布日历上显示鞋子的程序 (https://www.footlocker.com/release-dates/)像这样:
到目前为止,我有这个:
import requests as req
from bs4 import BeautifulSoup
def main():
url = "https://www.footlocker.com/release-dates/"
resp = req.get(url)
soup = BeautifulSoup(resp.content, "html.parser")
print(soup)
然而,当我加载HTML以使用BeautifulSoup进行解析时,带有包含鞋子日期和名称的信息的HTML代码看起来并不像我在网站上直接使用inspect元素时那样。我认为这是因为带有鞋子信息的HTML是由Javascript生成的。如果是这样,我如何加载请求?
谢谢。
答案 0 :(得分:0)
您无法使用enum
加载它,您可以并且应该使用 selenium
加载 ChromeDriver
(或任何其他浏览器),一旦使用它,您甚至不需要使用requests
进行解析工作:
bs4
由于所有产品的名称都在from selenium import webdriver
driver = webdriver.Chrome()
driver.get("https://www.footlocker.com/release-dates/")
names = driver.find_elements_by_class_name("productName")
names = [name.text for name in names]
days = driver.find_elements_by_class_name("days")
days = [day.text for day in days]
months = driver.find_elements_by_class_name("month")
months = [month.text for month in months]
dates = list(zip(days, months))
data = list(zip(names, dates))
标签中,因此很容易使用<div class="productImage"></div>
获取所有元素,然后使用 list comprehension 语法获取所有需要的元素文本。使用相同的过程查找所有日期和月份文本。
因为在解析时所有这些都是有序的,所以使用.find_elements_by_class_name
是一种方便的方法,只需要在一个大的元组列表中将它们组合在一起。关于zip
中的项目如何显示的演示:
data
答案 1 :(得分:0)
如果您的机器中安装了硒,那就没关系,安装它。你就是这样。
from selenium import webdriver
from bs4 import BeautifulSoup
driver = webdriver.Chrome()
driver.get("https://www.footlocker.com/release-dates/")
soup = BeautifulSoup(driver.page_source, "lxml")
driver.quit()
for item in soup.select(".day"):
shoe = item.select_one(".productName").get_text()
date = item.select_one(".date").get_text()
print(shoe,date)
部分结果:
Jordan Retro 1 HI OG 1Aug
Kids' Jordan Retro 1 HI OG 1Aug
Jordan Retro 1 HI OG 1Aug
Kids' Jordan Retro 1 HI OG 1Aug
Nike Kobe A.D. NXT 1Aug
Nike Dualtone Racer 1Aug