2011-09-29 83 views
2

我想刮除了最后一排和“类=”区域的下列信息“行:如何选择一些网址BeautifulSoup?

... 
<td>7</td> 
<td bgcolor="" align="left" style=" width:496px"><a class="xnternal" href="http://www.whitecase.com">White and Case</a></td> 
<td bgcolor="" align="left">New York</td> 
<td bgcolor="" align="left" class="Region">N/A</td> 
<td bgcolor="" align="left">1,863</td> 
<td bgcolor="" align="left">565</td> 
<td bgcolor="" align="left">1,133</td> 
<td bgcolor="" align="left">$160,000</td> 
<td bgcolor="" align="center"><a class="xnternal" href="/nlj250/firmDetail/7"> View Profile </a></td></tr><tr class="small" bgcolor="#FFFFFF"> 
... 

我这个处理器测试:

class TestUrlOpen(webapp.RequestHandler): 
    def get(self): 
     soup = BeautifulSoup(urllib.urlopen("http://www.ilrg.com/nlj250/")) 
     link_list = [] 
     for a in soup.findAll('a',href=True): 
      link_list.append(a["href"]) 
     self.response.out.write("""<p>link_list: %s</p>""" % link_list) 

这工作,但它也获得了”查看资料”链接,我不想:

link_list: [u'http://www.ilrg.com/', u'http://www.ilrg.com/', u'http://www.ilrg.com/nations/', u'http://www.ilrg.com/gov.html', ......] 

我可以很容易地删除“u'http://www.ilrg.com/'”刮痧部位后,但它会是不错的一名单没有它。做这个的最好方式是什么?谢谢。

回答

3

我想这可能是你在找什么。 attrs参数可能有助于隔离您想要的部分。

from BeautifulSoup import BeautifulSoup 
import urllib 

soup = BeautifulSoup(urllib.urlopen("http://www.ilrg.com/nlj250/")) 

rows = soup.findAll(name='tr',attrs={'class':'small'}) 
for row in rows: 
    number = row.find('td').text 
    tds = row.findAll(name='td',attrs={'align':'left'}) 
    link = tds[0].find('a')['href'] 
    firm = tds[0].text 
    office = tds[1].text 
    attorneys = tds[3].text 
    partners = tds[4].text 
    associates = tds[5].text 
    salary = tds[6].text 
    print number, firm, office, attorneys, partners, associates, salary 
+0

@ Doran:完美!谢谢你的帮助。 – Zeynel

1

我会得到每个TR,与类=清单表。您的搜索显然过于宽泛,无法获得您想要的信息。由于HTML具有结构,因此您可以轻松获取表格数据。从长远来看,这是更容易的,然后获取所有的hrefs并筛选出你不想要的。 BeautifulSoup有关于如何做到这一点的文件。 http://www.crummy.com/software/BeautifulSoup/documentation.html

没有确切的代码:

for tr in soup.findAll('tr'): 
    data_list = tr.children() 
    data_list[0].content # 7 
    data_list[1].content # New York 
    data_list[2].content # Region <-- ignore this 
    # etc 
+0

@ dm03514:谢谢。但'用于soup.findAll TR( 'TR'): DATA_LIST = tr.children()'给出'类型错误: 'NoneType' 对象未callable'错误。这是因为源中有多个表? – Zeynel

+0

@ dm03514:也'链接= soup.findAll( “TR”,{ “类”: “列表”})'返回一个空列表'[]'。我究竟做错了什么? – Zeynel