在Python中从URL中抓取特定信息

时间:2018-03-16 10:07:40

标签: python dataframe web-scraping beautifulsoup scrapy

抓取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(',')

但这有时适用于某些网址,有时它还包含其他类详情以及Current CPC ClassCurrent International Class。我还尝试BeautifulSoap使用View Page Source功能,但我很难提及课程。

1 个答案:

答案 0 :(得分: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 

<强>解释

您所使用的表格是页面中的第5个表格。 find_all('table')返回所有表的列表。因此,find_all('table')[4]将提供第5个表格。

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

最后,.text会为您提供标记内的文字。