【问题标题】:scraping data from unknown number of pages using beautiful soup使用漂亮的汤从未知数量的页面中抓取数据
【发布时间】:2017-08-29 19:02:12
【问题描述】:

我想从网站中解析一些信息,这些信息的数据分布在多个页面中。

问题是我不知道有多少页。可能有 2 个,但也可能有 4 个,甚至只有一页。

当我不知道会有多少页面时,如何循环页面?

但我知道 url 模式类似于下面的代码。

此外,页面名称不是纯数字,但它们在第 2 页的 'pe2' 和第 3 页的 'pe4' 等中,所以不能只循环范围(数字)。

我正在尝试修复的循环的这个虚拟代码。

pages=['','pe2', 'pe4', 'pe6', 'pe8',]

import requests 
from bs4 import BeautifulSoup
for i in pages:
    url = "http://www.website.com/somecode/dummy?page={}".format(i)
    r = requests.get(url)
    soup = BeautifulSoup(r.content)
    #rest of the scraping code

【问题讨论】:

  • 只是增加数字直到得到 404 响应?
  • 那么除了这个我还要写try吗?进展如何?
  • 是的,如果您遇到异常,那么那里什么都没有。
  • 请求不会在 404 响应中引发 - 只需检查 r.status_code > 299

标签: python loops beautifulsoup


【解决方案1】:

您可以使用while循环,当遇到异常时会停止运行。

代码:

from bs4 import BeautifulSoup
from time import sleep
import requests 

i = 0
while(True):
    try:
        if i == 0:
            url = "http://www.website.com/somecode/dummy?page=pe"
        else:
            url = "http://www.website.com/somecode/dummy?page=pe{}".format(i)
        r = requests.get(url)
        soup = BeautifulSoup(r.content, 'html.parser')

        #print page url
        print(url)

        #rest of the scraping code

        #don't overflow website
        sleep(2)

        #increase page number
        i += 2
    except:
        break

输出:

http://www.website.com/somecode/dummy?page
http://www.website.com/somecode/dummy?page=pe2
http://www.website.com/somecode/dummy?page=pe4
http://www.website.com/somecode/dummy?page=pe6
http://www.website.com/somecode/dummy?page=pe8
...
... and so on, until it faces an Exception.

【讨论】:

  • 酷我认为这几乎解决了我的问题,除了第一页的 url 链接中没有“pe”。然后下一个是pe2,然后每下一个增长+2。您知道如何在不创建大量 pe* 列表的情况下解决这个问题吗?
  • @AlexT 检查编辑后的答案。您可以通过使用if/else 子句来实现此目的,同时在每次迭代中将变量i 的值增加2
  • 嗯,不知何故,它在浏览不存在的页面后并没有停止。怎么会?
  • 哦,我想我现在明白了,如果我传递的页面数量高于可从站点正常选择的页面,它仍然存在类似一个数据......在这种情况下你会建议做什么?跨度>
  • 嗯...也许您可以尝试获取之前“ok”页面中存在的一些信息。 title 存在于“正常”的页面中,不存在于“不正常”的页面中,例如...
猜你喜欢
  • 2012-12-08
  • 2021-11-27
  • 1970-01-01
  • 2020-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-13
  • 2022-01-08
相关资源
最近更新 更多