Python 3:使用请求不会获取网页的全部内容

Posted

技术标签:

【中文标题】Python 3:使用请求不会获取网页的全部内容【英文标题】:Python 3: using requests does not get the full content of a web page 【发布时间】:2018-05-23 15:53:50 【问题描述】:

我正在测试使用requests 模块来获取网页的内容。但是当我查看内容时,我发现它没有获得页面的全部内容。

这是我的代码:

import requests
from bs4 import BeautifulSoup

url = "https://shop.nordstrom.com/c/womens-dresses-shop?origin=topnav&cm_sp=Top%20Navigation-_-Women-_-Dresses&offset=11&page=3&top=72"
page = requests.get(url)

soup = BeautifulSoup(page.content, 'html.parser')
print(soup.prettify())

如果我查看页面源代码,我在 chrome 网络浏览器上也看不到完整内容。

有没有办法获取我提供的示例页面的全部内容?

【问题讨论】:

"如果我在 chrome 网络浏览器上查看页面源,我也看不到完整的内容。"那你为什么要怪requests呢? 该页面可能是由浏览器中运行的javascript动态生成的。这很常见,*** 上有很多问题可以解决这个问题。 这可能就像@larsks 说的那样,你能告诉我们更多的细节,你在浏览器中显示源代码时看不到的代码的缺失部分是什么? @ElisByberi 我不怪requests,我只是说我在使用请求。 【参考方案1】:

页面使用 JavaScript 渲染,发出更多请求以获取更多数据。您可以使用 selenium 获取完整的页面。

from bs4 import BeautifulSoup
from selenium import webdriver
driver = webdriver.Chrome()
url = "https://shop.nordstrom.com/c/womens-dresses-shop?origin=topnav&cm_sp=Top%20Navigation-_-Women-_-Dresses&offset=11&page=3&top=72"
driver.get(url)
soup = BeautifulSoup(driver.page_source, 'html.parser')
driver.quit()
print(soup.prettify())

对于其他解决方案,请参阅我对Scraping Google Finance (BeautifulSoup)的回答

【讨论】:

谢谢,当我尝试运行您的代码时出现此错误: FileNotFoundError: [Errno 2] No such file or directory: 'chromedriver' 您需要下载ChromeDriver并将其放在您的路径sites.google.com/a/chromium.org/chromedriver 如果您使用的是 Windows,则可以使用无头版本的 chrome "Chrome Canary"。 我在 Mac 上,我将 chromedriver 复制到我的 python 源代码所在的位置,但仍然出现错误。 很久没在Linux上用Mac了 你把它放在/usr/local/bin/ 是不是和Mac一样?【参考方案2】:

请求不同于获取网页源代码或网页的视觉元素,从网页查看源代码也不能让您完全访问网页上的所有内容,包括数据库请求和其他后端内容。要么您的问题不够清楚,要么您误解了网络浏览的工作原理。

【讨论】:

这是我在 2020 年在 *** 上读到的最糟糕的回应。

以上是关于Python 3:使用请求不会获取网页的全部内容的主要内容,如果未能解决你的问题,请参考以下文章

如何用Python爬虫抓取网页内容?

python爬虫使用requests请求无法获取网页元素时终极解决方案

怎么爬取网页的动态内容,很多都是js动态生

java爬虫怎么抓取登陆后的网页数据

Python编程学习之利用selenium分辨出可访问的网页并获取网页内容

Python爬虫-1