使用BeautifulSoup浏览所有搜索结果页面

时间:2017-05-21 20:58:06

标签: python web-scraping beautifulsoup

我似乎无法掌握。 如何通过使用下一页链接直到最后一页导航使BeautifulSoup解析每个页面,并在找不到“下一页”时停止解析。在像这样的网站上

enter link description here

我尝试寻找Next按钮元素名称,我使用'find'来查找它,但不知道如何重复进行迭代直到所有页面都被删除。

谢谢

2 个答案:

答案 0 :(得分:2)

美丽的汤只会为您提供工具,如何浏览导航页面是您需要在流程图意义上解决的问题。

点击你提到的页面,点击几页,看来当我们在第1页时,网址中没有显示任何内容。

htt...ru/moskva/transport

我们在页面的来源中看到:

<div class="pagination-pages clearfix">
   <span class="pagination-page pagination-page_current">1</span>
   <a class="pagination-page" href="/moskva/transport?p=2">2</a>

让我们看一下当我们转到第2页时会发生什么

ht...ru/moskva/transport?p=2

<div class="pagination-pages clearfix">
  <a class="pagination-page" href="/moskva/transport">1</a>
  <span class="pagination-page pagination-page_current">2</span>
  <a class="pagination-page" href="/moskva/transport?p=3">3</a>

完美,现在我们有了布局。在我们制作美味汤之前还要了解一件事。当我们访问最后一个可用页面的页面时会发生什么。在撰写本文时:40161

ht...ru/moskva/transport?p=40161
we change this to:
ht...ru/moskva/transport?p=40162

该页面似乎自动返回到第1页。太棒了!

所以现在我们拥有了制作汤圈所需的一切。

而不是每次点击下一个,只需制作一个网址声明。你知道所需要的元素。

url = ht...ru/moskva/$searchterm?p=$pagenum

我假设运输是搜索词???我不知道,我不能读俄语。但是你明白了。构建网址。然后做一个请求呼叫

request =  requests.get(url)
mysoup = bs4.BeautifulSoup(request.text)

现在你可以在while循环中包装整个东西,每次除了第一次检查

mysoup.select['.pagination-page_current'][0].text == 1

这说,每次我们获取页面,通过使用类pagination-page_current找到当前选择的页面,它返回一个数组,所以我们选择第一个元素[0]得到它的文本.text并查看它是否等于1

这应该只适用于两种情况。你跑的第一页和最后一页。所以你可以使用它来启动和停止脚本,或者你想要的。

这应该是您正确执行此操作所需的一切。 :)

答案 1 :(得分:0)

BeautifulSoup本身不会加载页面。您需要使用requests之类的内容,抓取您想要关注的网址,加载并将其内容传递给另一个BS4汤。

import requests

# Scrape your url
r = requests.get(url)
soup = BeautifulSoup(r.text, 'html.parser') # You can now scrape the new page