提问人:DCUpro 提问时间:11/17/2023 最后编辑:HedgeHogDCUpro 更新时间:11/18/2023 访问量:49
从 h1 标签中提取文本时出现问题 美丽的汤
Problem extracting text from h1 tag Beautiful Soup
问:
我是解析网站的完全新手,但我有一个脚本,可以提取不同住房网站的数据,这些网站在过去一年中完美运行。但是,由于我无法弄清楚的原因,它不再适用于 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:])
答:
0赞
HedgeHog
11/18/2023
#1
一个问题是,这个网站也在保护其内容,所以你总是应该仔细看看响应文本或,因为在这种情况下,你所期望的内容都不是在HTML中。soup
您可以添加一个以避免这些行为一段时间,或者使用和 co. 来模仿浏览器。请注意,如果检测到您的其他抓取行为,服务器可能会再次阻止您。user-agent
selenium
例
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中出现错误。不过还是有效的。
评论
soup.find_all(class_="styles__SearchH1-sc-1t5gb6v-3 guZHZl")
在该页面上未找到任何匹配的 HTML 元素。也许网站已更新或重新设计,不再使用该特定类名。