Как выбрать несколько URL-адресов с BeautifulSoup? - PullRequest
2 голосов
/ 30 сентября 2011

Я хочу очистить следующую информацию, кроме последней строки и строки "class =" Region ":

...
<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/'" после очистки сайта, но было бы неплохо иметь список безЭто.Каков наилучший способ сделать это?Спасибо.

Ответы [ 2 ]

3 голосов
/ 30 сентября 2011

Я думаю, это может быть то, что вы ищете.Аргумент 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
1 голос
/ 30 сентября 2011

Я бы получил каждый tr в таблице с перечислением class =.Ваш поиск явно слишком широк для нужной вам информации.Поскольку 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
...