2012-04-09 126 views
0

我是一个Python编程的初学者,我正在尝试学习如何抓取网页。我想要做的是从这里抓取数据web pagePython/BeautifulSoup:从网页上刮去数据

我想从上面的页面上刮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

请说明问题。 – cha0site 2012-04-09 18:25:29

+0

标记的大小写应该没有关系,但文档中的小写标记名不是大写http://www.crummy.com/software/BeautifulSoup/bs3/documentation.html#find%28name,%20attrs,%20recursive,% 20text,%20 ** kwargs%29 – dm03514 2012-04-09 18:31:21

+0

ya我需要从网页中剔除“发布日期” – user1301449 2012-04-09 19:23:55

回答

0

如果在循环之前,你加... print value1 你可以看到HTML是否已在人物27,这是缺少开幕双引号结束的双引号上线37的错误。

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 
+0

这个代码的输出是没有的。我没有得到日期。可以请你帮我 – user1301449 2012-04-09 19:25:21

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 
+0

我无法打印显示'NONE'的date.its。你能帮我么。 – user1301449 2012-04-09 20:11:18

+0

该守则的输出是没有的。我无法打印发行日期。请你帮我。 – user1301449 2012-04-09 20:31:27

+0

在最后加上这一行:'code' print“获胜者是:”,value1 [3] .find('tr')。findAll('td')[ - 1] .text – GregD 2012-05-03 23:19:50

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 
0

使用同样发现文本功能,然后重复与下一个元素下一个功能是这样的:

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