当前位置: 首页 > 知识库问答 >
问题:

(Python 3,BeautifulSoup 4)-在Div中进行刮页分页

拓拔弘化
2023-03-14

我可以浏览此网站的第一页:

http://ratings.food.gov.uk/enhanced-search/en-GB/^/伦敦/相关性/0/^/^/0/1/10

但我正试图通过使用网站分页中的“下一步”按钮来刮除网站上的所有其他页面。

我单击了Next按钮,可以看到第2页的参数从0/1/10更改为0/2/10,以此类推。

我已经看了分页代码,我可以看到分页在一个Div中

 <div id="pagingNext" class="link-wrapper">

问题是,我仅使用以下代码成功地从另一个站点刮取分页:

button_next = soup.find("a", {"class": "btn paging-next"}, href=True)
while button_next:
    time.sleep(2)#delay time requests are sent so we don't get kicked by server
    soup=makesoup(url = "https://www.propertypal.com{0}".format(button_next["href"]))

这是可行的,但由于我目前正在抓取的这个网站似乎没有为下一个按钮URL提供a href,我不知道如何尝试和抓取它

我试过:

button_next = soup.find("div", {"class": "paging-Next"})
while button_next:
    time.sleep(2)#delay time requests are sent so we don't get kicked by server
    soup=makesoup(url = "https://www.propertypal.com{0}".format(button_next))

但它似乎没有刮到其他页面,只是第一页仍然。

如果有人能提供帮助,我将不胜感激。

谢谢

共有3个答案

况景龙
2023-03-14

正如t.m.adam爵士已经提到的那样,这是在不知道有多少页的情况下耗尽所有页面的最佳方法。试试这个。它会告诉你所有的名字。

import requests
from bs4 import BeautifulSoup

target_url = url = "http://ratings.food.gov.uk/enhanced-search/en-GB/%5E/London/Relevance/0/%5E/%5E/0/{}/10"

page_num = 1
while True:
    response = requests.get(target_url.format(page_num))
    if response.status_code == 404: # break once the page is not found
        break
    print("Scraping Page Number {}".format(page_num))
    soup = BeautifulSoup(response.text,"lxml")
    for item in soup.findAll("div",class_="ResultsBusinessName"):
        name = item.findAll("a")[0].text
        print(name.strip())

    page_num += 1
钱锐
2023-03-14

解决方法:

当您在检查Next按钮时有True,您可以手动创建链接并通过递增数字尾在循环中打开它们,如您所写:第2页从0/1/10到0/2/10,依此类推。

大概是这样的:

base_ur = 'http://ratings.food.gov.uk/enhanced-search/en-GB/%5E/London/Relevance/0/%5E/%5E/0/' # deleting 1/10

incr = 0
while button_next:
    incr+=1
    next_url = base_url + str(incr)+'/10'
    page = urllib.requests.urlopen(next_url)
    (and then scraping goes)
穆修杰
2023-03-14

没有必要验证button_nexturl,因为您已经知道url在所有页面上是如何变化的。所以,不要使用url"http://ratings.food.gov.uk/enhanced-search/en-GB/^/London/相关性/0/^/^/0/1/10",我建议使用"http://ratings.food.gov.uk/enhanced-search/en-GB/^/London/相关性/0/^/^/0/1/50",网站提供了一次看到50个项目的选项,所以不要迭代4044,你只浏览了809页。

在同时循环中,我们等待当前为810,所以我们知道最后一页被刮掉了,因为通过检查,/809/50是最后一页。

import requests
from bs4 import BeautifulSoup

current = 0
while current < 810:  # Last page, by inspection is /809/50
    url = "http://ratings.food.gov.uk/enhanced-search/en-GB/%5E/London/Relevance/0/%5E/%5E/0/{:d}/50".format(current)
    data = requests.get(url).text 
    soup = BeautifulSoup(data, "html.parser")
    print(url)
    current += 1
    #  Do your scraping here
 类似资料:
  • 最近我一直在用Python和靓汤学习网页刮刮乐。然而,当我试图刮下下面的页面时,我遇到了一点麻烦: http://www.librarything.com/work/3203347 我想从页面上得到的数据是这本书的标签,但我找不到任何方法来获取数据,尽管我花了很多时间在网上拖网。 我试着在网上看了几本指南,但似乎没有一本奏效。我尝试将页面转换为XML和JSON,但仍然找不到数据。 我现在有点手足无

  • 问题内容: 我有一个内存中大约有1000个项目的数据集,正在尝试为此数据集创建一个传呼机,但是我不确定如何执行此操作。 我使用的是自定义过滤器功能来过滤结果,效果很好,但是以某种方式我需要获取页面数。 有什么线索吗? 问题答案: 查看UI Bootstrap的分页指令。我最终使用了它,而不是使用此处发布的内容,因为它具有当前使用的足够功能,并且具有详尽的测试规范。 视图 控制者 我做了一个工作的小

  • 问题内容: 我在Titan上使用Elastic Search。如何用泰坦在ES中进行分页? 我看到了这个,所以尝试了这个: 事情是它返回所有4-5个记录,而不是2的大小 问题答案: 参数尚不支持。该方法仅存在于将来的实现中。但是,您目前可以限制结果。下面的代码应该工作: …但是您不能指定偏移量。 干杯,丹尼尔

  • 问题内容: 我想使用sails.js,mongodb和waterline-ORM创建分页表。 在sails.js中是否有任何特定的分页方法? 问题答案: http://sailsjs.org/#/documentation/concepts/ORM/Querylanguage.html 如果您希望分页异步工作,则使用JQUERY 和在服务器上非常容易 在水线和航行文档中有很多信息。

  • 问题内容: 我正在用Node.js和猫鼬编写一个Webapp。如何对通话结果进行分页?我想要一个与SQL 相当的功能。 问题答案: 在通过Rodolphe提供的信息仔细研究了Mongoose API之后,我想出了以下解决方案: