python - BeautifulSoup 与 find all 只给出最后的结果

标签 python html web-scraping beautifulsoup

我正在尝试使用 beautiful soup 从页面中检索所有产品。该页面有分页,为了解决这个问题,我创建了一个循环以使检索适用于所有页面。 但是,当我进入下一步并尝试“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

关于python - BeautifulSoup 与 find all 只给出最后的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56620632/

相关文章:

python - 在 tkinter 按钮中显示图像;垃圾收集/切换框架问题?

python - 从 html <script> 中提取 JSON 对象

javascript - 下拉分组 - 避免选择父项

python - 无法从网页中抓取标题

javascript - 将 HTML 文档的 javascript 部分中的字段提取到表中?地理坐标

python - DataFrame 多目标排序定义 Pareto 边界

Java HtmlUnit 点击 anchor

javascript - 如何将 Shift+Click 事件传递到底层输入元素?

javascript - 如何避免向 ElasticSearch 插入重复文档

python - 使用Python遍历Neo4j数据库