【问题标题】:Unable to extract date value from website with Python and Beautiful Soup无法使用 Python 和 Beautiful Soup 从网站中提取日期值
【发布时间】:2021-03-12 10:00:41
【问题描述】:

我想从一个网站中提取日期。我想要发布新闻文章的日期/时间。 这是我的代码:

从 bs4 导入 BeautifulSoup 导入请求

url = "http://buchholterberg.ch/de/Gemeinde/Information/News/Newsmeldung?filterCategory=22&newsid=911"
response = requests.get(url)
soup = BeautifulSoup(response.content, 'html.parser')


date_tag = 'div#middle p' # this gives me all the paragraphs
date = soup.select(date_tag)
print(date)

你也可以试试这个网站:

url = 'http://www.embrach.ch/de/aktuell/aktuellesinformationen/?action=showinfo&info_id=1098080'

请查看url,这是我要抓取的网站,我要获取的日期/时间是:13:05:28 26.11.2020

这是我的 css 选择器,它只给我段落,但日期/时间不在段落中,它在字体标签中。

date_tag = 'div#middle p'

但是当我将我的 css 选择器设置为:

date_tag = 'div#middle font'

我得到 []

是否可以提取不在任何子标签中的数据?

【问题讨论】:

    标签: python web-scraping beautifulsoup


    【解决方案1】:

    如果您抓取这些元素,您会注意到 date 是 <h1> 标记的下一个兄弟节点。所以获取<div id="middle"> 标签。然后在该标签中,获取<h1> 标签。然后从那个<h1>标签,得到.nextSibling(如果它放在某个标签元素之前,还有.previousSibling),它是文本。那么这只是一些字符串操作的问题。

    代码:

    import requests
    from bs4 import BeautifulSoup
    
    url = "http://buchholterberg.ch/de/Gemeinde/Information/News/Newsmeldung?filterCategory=22&newsid=911"
    response = requests.get(url)
    soup = BeautifulSoup(response.content, 'html.parser')
    
    date = soup.find_all('div',{'id':'middle'})
    print(date)
    
    for each in date:
        print(each.find('h1').nextSibling.split(':',1)[-1].strip())
    

    输出:

    13:05:28 26.11.2020
    

    【讨论】:

    • 是否可以仅使用 css 选择器来执行此操作(或类似的操作)?这样我就可以更改 date_tag 了吗?
    • 是的。只需将date = soup.find_all('div',{'id':'middle'}) 更改为date = soup.select('div#middle')
    【解决方案2】:

    您还必须提取整个文本,因为它们都是相同的元素。但是你可以做的是获取元素,因为它基本上是相同的,除了几分钟,我认为这无关紧要。如果您在选择 h1 元素方面需要帮助,请告诉我

    【讨论】:

    • 我知道如何提取特定元素,但我不知道如何提取不在任何子元素中的数据。有时日期/时间在顶部,然后是 h1 和 p,有时在底部,有时在中间。查看其他网站
    • @taga 好吧,你不能对具有不同 html 代码的不同网站做同样的事情,你可以做的是刮掉 p 标签,因为日期在“p”标签内,我怀疑你可以指定未指定的内容。在第一个示例中,您可以使用 h1 来仅获取日期
    • 我知道我不能用相同的代码做到这一点,我只是举个例子。在第一种情况下,日期不在 h1 标签中(我想要这个日期 26.11.2020)。在第二种情况下,日期不在 p 标签中
    • 哦,是的,对不起,它不在 h1 标记内,但是您可能必须采用下一个父级(两个站点的 div),或者您可能采用 findSibling 功能,不确定它是什么没有
    • 你为什么不赞成这个答案?我说的是对的
    猜你喜欢
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 1970-01-01
    • 2019-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多