bs4仅获得前15个值

时间:2019-01-28 09:03:59

标签: python-3.x web-scraping beautifulsoup

您好,我是Bs4的新手,我需要从某个网站上获取所有产品,但我试图获取这些值,但它仅显示页面中100个产品中的前15个

from bs4 import BeautifulSoup
import requests
base_url = 'http://www.elkay.com/sinks/undermount#q=|100|0|1|'
response = requests.get(base_url)
soup = BeautifulSoup(response.content.decode('utf-8'), "html.parser")

is_row = soup.findAll('div', attrs={'class': 'product result_detail'})
print(is_row)

有人可以帮助我吗?

这里is_row是一个len-15的结果集,实际上它们是100个产品

将提供任何帮助。谢谢

1 个答案:

答案 0 :(得分:2)

如果您检查该URL是否具有“ not-that-fast”连接(例如mine:D),则可以看到它仅加载15个项目,在完全加载之后,它会发送ANOTHER请求以加载其余项目。这就是为什么您仅使用代码获得前15个项目的原因(仅获得第一个请求的响应)

使用Chrome开发者工具(按F12键),您可以轻松找到正确的请求:

  1. 打开网站
  2. 打开开发人员工具(F12)
  3. 点击“网络”标签
  4. 现在选择每页结果:100
  5. 您应该看到一个名为CategoryNavigationResultsView的新请求
  6. 复制curl命令(复制为cURL(bash))

Copy curl command

  1. 使用this very handy site将curl请求转换为python请求

我不会复制完整的请求,但是它有一个数据参数:

data = {
    'contentBeginIndex': '0^',
    'productBeginIndex': '0^',
    'showPageSize': '100^',
}

发送这样的请求应该可以让您获得全部100件商品。您还可以通过更改... BeginIndex获得以下页面。