用Python从URL中爬取特定信息

4

最简单的爬取HTML表格的方法是使用pandas.read_html(url)。对于下面的URL,我可以获取其中的所有表格

import pandas as pd
url="http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PALL&p=1&u=%2Fnetahtml%2FPTO%2Fsrchnum.htm&r=1&f=G&l=50&s1=3944788.PN.&OS=PN/3944788&RS=PN/3944788"
df=pd.read_html(url)

从上述网址中,我只需要这个特定的信息。

Current U.S. Class: 235/54F

考虑将上述的df视为一个列表,我编写了以下代码以获取特定信息

myitem="Current U.S. Class:"
for i in range(len(df)):
    if myitem in str(df[i]):
        ClassTitle=''.join(df[i][0])
        ClassNumber=''.join(df[i][1])

if ';' in ClassTitle:
    ClassTitle=ClassTitle.rsplit(':')
    print(ClassTitle[0])
if ';' in ClassNumber:
    ClassNumber=ClassNumber.rsplit(';')
if ',' in ClassTitle:
    ClassTitle=ClassTitle.rsplit(',')
    print(ClassTitle[0])
if ',' in ClassNumber:
    ClassNumber=ClassNumber.rsplit(',')

但是,对于某些URL,这有时可以正常工作,有时也包括其他类别的详细信息,如当前CPC类别当前国际类别。我还尝试过使用BeautifulSoap查看页面源代码功能,但我不确定如何提及类别。

1个回答

2

使用BeautifulSoup

import requests
from bs4 import BeautifulSoup

r = requests.get('http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PALL&p=1&u=%2Fnetahtml%2FPTO%2Fsrchnum.htm&r=1&f=G&l=50&s1=3944788.PN.&OS=PN/3944788&RS=PN/3944788')
soup = BeautifulSoup(r.text, 'lxml')
table = soup.find_all('table')[4]
result = table.find('tr').text
print(result)
# Current U.S. Class: 235/54F 

说明

您需要的表格是页面中的第五个表格。 find_all('table') 返回所有表格的列表。因此,find_all('table')[4] 将给出第五个表格。

您想要的文本位于第一行或第一个 tr 标签中。 table.find('tr') 返回在表格内找到的第一个 tr 标签。

最后,.text 提供标签内的文本内容。


有没有直接的方法来获取包含所需信息的表格编号,因为某些URL在其他表格编号中包含此信息。一种解决方案是首先在所有表格中搜索“Current US Class”字符串并获取包含此信息的表格编号,但我想知道是否有更直接的方法?@Keyur Potdar - Roshni Amber
你可以使用find_parent()方法来实现。试着自己做一下。如果你无法完成,可以在SO上提出一个新的问题,如果还没有人问过的话。你将不会得到表格编号,但你将直接得到表格。 - Keyur Potdar
当然,兄弟,非常感谢你的好意。 - Roshni Amber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接