Python / BeautifulSoup:从网页抓取数据

时间:2012-04-09 18:20:00

标签: python beautifulsoup

我是Python编程的初学者,我正在努力学习如何抓取网页。我要做的是从这个web page

中抓取数据

我正在尝试从上一页抓取ISSUE DATE(如果您打开网页,则可以看到ISSUE DATE)。我面临一些问题。

这是我为此写的代码。

import BeautifulSoup
import urllib2

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=0000149.PN.&OS=PN/0000149&RS=PN/0000149"

data = urllib2.urlopen(url).read()
soup = BeautifulSoup.BeautifulSoup(data)
value1 = soup.findAll('TABLE')

for value in value1:
    date1 = value.find('B').text
    print date1

5 个答案:

答案 0 :(得分:0)

如果在循环之前添加了... print value1 你可以看到html在第37行的第27个字符中有一个错误,这是一个关闭的双引号,它缺少了它的开头双引号。

答案 1 :(得分:0)

这可能没有优化,但这是回到发行日期的一种方法:

import BeautifulSoup
import urllib2

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=0000149.PN.&OS=PN/0000149&RS=PN/0000149"

data = urllib2.urlopen(url).read()
soup = BeautifulSoup.BeautifulSoup(data)
issue_date = soup.findAll('b')[5].text
print issue_date

答案 2 :(得分:0)

BeautifulSoup需要标记名称为小写。另请注意,使用少数几个 尝试..除了块会使调试这更容易一些。似乎是以下代码 实现你想要的目标:

import BeautifulSoup
import urllib2

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=0000149.PN.&OS=PN/0000149&RS=PN/0000149"

data = urllib2.urlopen(url).read()
soup = BeautifulSoup.BeautifulSoup(data)
value1 = soup.findAll('table')
n=0
for value in value1:
    date1 = value.find('b')
    try: print n,date1.text
    except: print n
    n=n+1
try: print "The winner is:",value1[3].find('b').text
except: pass

答案 3 :(得分:0)

如果页面中的结构相同,则可以执行此操作

import BeautifulSoup
import urllib2

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=0000149.PN.&OS=PN/0000149&RS=PN/0000149"

data = urllib2.urlopen(url).read()
soup = BeautifulSoup.BeautifulSoup(data)
for td in soup.findAll('td'):
    if td.get('width','') !='' and td.get('width')=='80%':
        print td.text

答案 4 :(得分:0)

使用查找文本函数,然后使用 next 函数迭代到下一个元素,如下所示:

import requests
from bs4 import BeautifulSoup   
url="http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PALL&p=1&u=/netahtml/PTO/srchnum.htm&r=1&f=G&l=50&s1=0000149.PN.&OS=PN/0000149&RS=PN/0000149"
html=requests.get(url).content
issue_date_zone = BeautifulSoup(html).find(text='Issue Date:')
date_str=issue_date_zone.next.next.text
print date_str

结果是:

March 25, 1837