从 h1 标签中提取文本时出现问题 美丽的汤

Problem extracting text from h1 tag Beautiful Soup

提问人:DCUpro 提问时间:11/17/2023 最后编辑:HedgeHogDCUpro 更新时间:11/18/2023 访问量:49

问:

我是解析网站的完全新手,但我有一个脚本,可以提取不同住房网站的数据,这些网站在过去一年中完美运行。但是,由于我无法弄清楚的原因,它不再适用于 daft.ie。我尝试过调试,但我尝试的似乎都不起作用。我要么得到“列表索引超出范围”,要么得到“无”,我知道它表明数组是空的,但显然不是。下面是一些有问题的代码片段。

希望有比我更有知识的人看一看,因为我相信这将是显而易见的事情。

感谢该网站的所有帮助。

import sys
import requests
from bs4 import BeautifulSoup

def get_buy_numbers_dublin_city():
    page = requests.get("https://www.daft.ie/property-for-sale/dublin-city")
    soup = BeautifulSoup(page.content, 'html.parser')

    prop_num = str(soup.find_all(class_="styles__SearchH1-sc-1t5gb6v-3 guZHZl")[0])
    prop_num = prop_num.replace('<h1 class="styles__SearchH1-sc-1t5gb6v-3 guZHZl" data-testid="search-h1">', '')
    prop_num = prop_num.replace(' Properties for Sale in Dublin City</h1>', '')
    prop_num = prop_num.replace(',', '')
    return(prop_num)

def main(argv):

    print(get_buy_numbers_dublin_city())

if __name__ == "__main__":
    main(sys.argv[1:])
解析 网页抓取 beautifulsoup python-requests

评论

0赞 John Gordon 11/17/2023
我知道它表明数组是空的,但显然不是为什么说“显然不是”?你怎么知道它不是空的?
0赞 John Gordon 11/17/2023
此外,请包含完整的错误回溯消息,以便我们不必猜测错误发生的位置。
0赞 DCUpro 11/17/2023
错误是:prop_num = str(soup.find_all(class_=“styles__SearchH1-sc-1t5gb6v-3 guZHZl”)[0]) IndexError:列出索引超出范围 我也尝试过使用 lxml,它给了我数组的“None”类型,所以我只是假设它被视为空的。
0赞 John Gordon 11/17/2023
soup.find_all(class_="styles__SearchH1-sc-1t5gb6v-3 guZHZl")在该页面上未找到任何匹配的 HTML 元素。也许网站已更新或重新设计,不再使用该特定类名。
0赞 Je Je 11/17/2023
这意味着它找不到任何类。我相信在引用多个类时,您需要用点替换空格。所以soup.find_all(class_=“.styles__SearchH1-sc-1t5gb6v-3.guZHZl”)[0],也许吧?

答:

0赞 HedgeHog 11/18/2023 #1

一个问题是,这个网站也在保护其内容,所以你总是应该仔细看看响应文本或,因为在这种情况下,你所期望的内容都不是在HTML中。soup

您可以添加一个以避免这些行为一段时间,或者使用和 co. 来模仿浏览器。请注意,如果检测到您的其他抓取行为,服务器可能会再次阻止您。user-agentselenium

import requests
from bs4 import BeautifulSoup

page = requests.get("https://www.daft.ie/property-for-sale/dublin-city", headers={'user-agent':'some-agent'})
soup = BeautifulSoup(page.content)

print(soup.h1.text.split()[0])

会给你:

2,544

评论

0赞 DCUpro 11/22/2023
非常感谢。我怀疑请求被阻止了,但我不确定如何测试这个理论。我应该使用硒,但我甚至从未意识到这一点。不过,您的解决方案更适合我的用例,因此感谢您。小修改:我不得不将“html.parser”添加到BeautifulSoup构造函数中,以避免在Pycharm中出现错误。不过还是有效的。