为什么网站的HTML与Python的请求库提供的HTML不同?

时间:2017-09-10 20:06:48

标签: python html web-scraping beautifulsoup python-requests

我正在尝试熟悉请求和BeautifulSoup,所以我给了自己一个迷你项目。我正在尝试制作一个在Footlocker发布日历上显示鞋子的程序 (https://www.footlocker.com/release-dates/)像这样:

  • ShoeName#1 Date#1
  • ShoeName#2 Date#2
  • ShoeName#3 Date#3
  • ShoeName#4 Date#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生成的。如果是这样,我如何加载请求?

谢谢。

2 个答案:

答案 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