为什么网站上的HTML与Python';图书馆的要求是什么?

为什么网站上的HTML与Python';图书馆的要求是什么?,python,html,web-scraping,beautifulsoup,python-requests,Python,Html,Web Scraping,Beautifulsoup,Python Requests,我试着让自己熟悉请求并美化团队,所以我给了自己一个小项目。我正在尝试制作一个程序,在Footlocker的发布日历上显示鞋子 ()像这样: ShoeName#1日期#1 ShoeName#2日期#2 ShoeName#3日期#3 ShoeName#4日期#4 到目前为止,我有: import requests as req from bs4 import BeautifulSoup def main(): url = "https://www.footlocker.com/rele

我试着让自己熟悉请求并美化团队,所以我给了自己一个小项目。我正在尝试制作一个程序,在Footlocker的发布日历上显示鞋子 ()像这样:

  • ShoeName#1日期#1
  • ShoeName#2日期#2
  • ShoeName#3日期#3
  • ShoeName#4日期#4
到目前为止,我有:

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生成的。如果是的话,我如何用请求加载它


谢谢。

您不能用
请求加载它,您可以而且应该使用它加载的是(或任何其他浏览器),一旦使用它,您甚至不需要使用
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))
由于所有产品的名称都在
标记中,因此使用
很容易抓取所有元素。通过\u class\u name
查找\u元素,然后使用列表理解语法获取所有所需元素的文本。使用相同的过程查找所有日期和月份文本

因为它们在解析时都是有序的,所以使用
zip
是一种简便的方法,可以将它们集中在一个大元组列表中。演示
数据中的项的外观:

>>> data[:10]
[('Jordan Retro 1 HI OG', ('1', 'Aug')), ("Kids' Jordan Retro 1 HI OG", ('1', 'Aug')), ('Jordan Retro 1 HI OG', ('1', 'Aug')), ("Kids' Jordan Retro 1 HI OG", ('1', 'Aug')), ('Nike Kobe A.D. NXT', ('1', 'Aug')), ('Nike Dualtone Racer', ('1', 'Aug')), ('Nike Duelist Racer', ('1', 'Aug')), ('Jordan Super.Fly 2017', ('3', 'Aug')), ("Kids' Jordan Super.Fly 2017", ('3', 'Aug')), ('Nike Air VaporMax Flyknit', ('3', 'Aug'))]

如果您的机器中安装了selenium,则可以安装它。这是你的方式

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

学习并使用
Selenium