python - 找到所有的美丽汤只给出最后一个结果
问题描述
我正在尝试使用漂亮的汤从页面中检索所有产品。该页面有分页,为了解决这个问题,我制作了一个循环来使所有页面的检索工作。但是,当我进入下一步并尝试“find_all()”标签时,它只给出最后一页的数据。如果我在一个孤立的页面上尝试它工作正常,所以我客人说从所有页面获取所有 html 是一个问题。
我的代码是下一个:
import pandas as pd
import numpy as np
from bs4 import BeautifulSoup
import urllib3 as ur
http = ur.PoolManager()
base_url = 'https://www.kiwoko.com/tienda-de-perros-online.html'
for x in range (1,int(33)+1):
dog_products_http = http.request('GET', base_url+'?p='+str(x))
soup = BeautifulSoup(dog_products_http.data, 'html.parser')
print (soup.prettify)
和那些已经完成的:
soup.find_all('li', {'class': 'item product product-item col-xs-12 col-sm-6 col-md-4'})
正如我所说,如果我不使用 for 范围而只检索一页(例如:https ://www.kiwoko.com/tienda-de-perros-online.html?p=10 ,它可以正常工作并给我36 种产品。
我已经把“汤”复制到一个word文件中,搜索类看看有没有问题,但是我要找的1.153产品全都有。
所以,我认为汤是正确的,但当我寻找“不止一个 html”时,我认为 find all 运行良好。
可能是什么问题呢?
解决方案
您确实希望您find
在循环中,但这是一种复制页面生成的 ajax 调用的方法,它允许您为每个请求返回更多项目,还可以动态计算页面数并对所有产品发出请求。
我重新使用与 Session 的连接以提高效率。
from bs4 import BeautifulSoup as bs
import requests, math
results = []
with requests.Session() as s:
r = s.get('https://www.kiwoko.com/tienda-de-perros-online.html?p=1&product_list_limit=54&isAjax=1&_=1560702601779').json()
soup = bs(r['categoryProducts'], 'lxml')
results.append(soup.select('.product-item-details'))
product_count = int(soup.select_one('.toolbar-number').text)
pages = math.ceil(product_count / 54)
if pages > 1:
for page in range(2, pages + 1):
r = s.get('https://www.kiwoko.com/tienda-de-perros-online.html?p={}&product_list_limit=54&isAjax=1&_=1560702601779'.format(page)).json()
soup = bs(r['categoryProducts'], 'lxml')
results.append(soup.select('.product-item-details'))
results = [result for item in results for result in item]
print(len(results))
# parse out from results what you want, as this is a list of tags, or do in loop above
推荐阅读
- c++ - 使用 devtoolsets-8-gcc 构建 Boost 失败?
- keras - keras 和输入和损失的形状
- r - 整理数据集
- html - gap 属性表明它在 MDN 上不受支持。使用安全吗?
- flutter - 在抽屉小部件中使用时,输入字段隐藏在键盘下方
- monaco-editor - Monaco JavaScript 编辑器 - 如何更改智能感知位置以显示在线下方?
- python - 通过 gspread 和 google sheet API 更改 google sheet 中的列格式
- java - Maven在构建子项目时从jar依赖中解包类
- joi - 如何通过检查字符串的值是否在数组中来检查字符串是否有效
- python - Selenium“DevToolsActivePort 文件不存在”错误