从 Python 中的 URL 抓取特定信息
Posted
技术标签:
【中文标题】从 Python 中的 URL 抓取特定信息【英文标题】:Crawling a specific information from a URL in Python 【发布时间】:2018-08-25 08:38:04 【问题描述】:抓取 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)
从上面的 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,有时它还包括其他类详细信息以及 Current CPC Class
和 Current International Class
。我也试过BeautifulSoap
使用View Page Source
功能,但我很困惑提到类。
【问题讨论】:
【参考方案1】:使用 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]
会给出第五张桌子。
您想要的文本位于第一行或第一个tr
标记中。 table.find('tr')
返回在表中找到的第一个 tr
标记。
最后,.text
为您提供标签内的文本。
【讨论】:
是否有任何直接的方法来获取包含所需信息的表号,因为某些 url 包含在其他表号中的此信息。一种解决方案可以是首先我必须在所有表中搜索“当前美国类别”字符串并获取包含此信息的表号,但我想知道有什么直接的方法吗? @Keyur Potdar 您可以为此使用find_parent()
方法。尝试自己做。如果您无法做到这一点,如果没有人问过,您可以在 SO 上提出一个新问题。你不会得到桌号,但你会直接得到桌子。
好兄弟,非常感谢你的好意。以上是关于从 Python 中的 URL 抓取特定信息的主要内容,如果未能解决你的问题,请参考以下文章
使用 Beautifulsoup 和 Python 从 CSV 中抓取多个 URL
Python爬虫编程思想(161):Scrapy中的通用爬虫