【问题标题】:Extract specific html tag using python使用python提取特定的html标签
【发布时间】:2021-07-18 20:07:47
【问题描述】:

在这个链接https://patents.google.com/patent/WO2012061469A3/en?oq=medicinal+chemistry我想要打印专利引用的代码,它应该给出出版号,标题。

然后我想使用 pandas 将出版物编号放在一列中,将标题放在另一列中。到目前为止,我已经使用 beautiful soup 将 HTML 文件转换为可读格式。我选择了反向引用 HTML 标记,并在该标记下打印引用的出版物编号和标题。我举了一个例子,但是我有一个文件夹,里面装满了 HTML 文件,我稍后会做。

x = soup.select('tr[itemprop="backwardReferences"]')
y = soup.select('td[itemprop="title"]')  # this line gives all the titles in the document not particularly under the patent citations
print(y)
print(y)

【问题讨论】:

    标签: python html pandas list beautifulsoup


    【解决方案1】:

    您可以使用以下 css 选择器组合。 select_one 确保它与第一个表匹配。如果您担心表格顺序发生变化,可以添加 :not 以排除另一个表格,基于第二个 (Non-Patent Citationstable) 的文本:

    pd.read_html(str(soup.select('section:has(h2:contains("Patent Citations"):not(:contains("Non-Patent Citations"))) > table')))
    

    注意:

    1. 虽然网页在呈现时会直观地显示 2 个专利引用结果,但在页面源中的此表中只有 1 个位于此表中,因此在 requests 内容中。
    2. 我使用了 pandas,正如您所说,无论如何您都将使用此导入来生成表格输出和子集特定列。
    3. 您可以使用pd.concat() 将数据帧组合成一个循环覆盖多个文件,以生成最终的单个df。

    from bs4 import BeautifulSoup as bs
    import requests
    import pandas as pd
     
    r = requests.get('https://patents.google.com/patent/WO2012061469A3/en?oq=medicinal+chemistry')
    soup = bs(r.content, 'lxml')
    df = pd.read_html(str(soup.select_one('section:has(h2:contains("Patent Citations")) > table')))[0]
    print(df.loc[: , ['Publication number', 'Title']])
    

    【讨论】:

    • 是的,它有效。你能解释一下你写表的意思吗?我了解您从 HTML 标记中选择标题 h2。然后我们 >table 是什么意思?为什么代码没有选择我在 URL 链接上看到的第二个引用
    • f 我检查了这个链接,例如:patents.google.com/patent/US4458945?oq=US4458945A 我认为 HTML 标签是不同的。我只是无法打印正确的专利引文(16- 家族对家族的引文不被打印)。我试过 section:has(tr:contains("backwardReferences"))>table 但它不起作用。如何使用标签 tr itemprop=backwardReferences" 我认为这可能会给出所有引用
    • > 表意味着表是 > 左侧的任何内容的直接子级。如果从请求中返回 html,则表中只有 1 个引用,而不是 2 个。我假设在网页上运行的 js 会在查看网站上的页面时改变它的外观。这在使用请求时不会运行。
    • 您的问题要求patent citations,所以我只返回了那些。你现在是说你想要所有的引用吗?
    猜你喜欢
    • 1970-01-01
    • 2016-06-10
    • 2019-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 2013-05-20
    相关资源
    最近更新 更多