2014-11-02 2 views
-2
>>> soup = BeautifulSoup(html) 
>>> om = soup.find_all('td', {'class': 'rec_title_ppnlist'}) 
>>> om 
[<td class="rec_title_ppnlist"> 
<div><a class=" link_gen " href="SHW?FRST=1">Wambold von Umstadt, Anselm Kasimir, 1583-1647 (Zeit, Lebensdaten)</a></div> 
<div><span>Theologia Germanica : Libellus Aureus Hoc Est Brevis Et Praegnans Quomodo Sit Exuendus Vetus Homo Induendusque Novus</span></div> 
<div><span>Lipsiae : Walther, 1630 [i.e. 1730]</span></div> 
<div class="rec_sep"><img alt="" src="http://gsowww.gbv.de/images/gui/empty.gif" title="" border="" height="1" width="1"></div> 

BeautifulSoup: выскабливание и переборе

мне нужно повторять этот bs4.element.ResultSet через href="SHW?FRST=1 к 25000 (приблиз). У меня есть две большие проблемы:

  1. Поиск om дает мне только первые 10 записей.
  2. мне нужно создать файл с «информацией» Царапина в поиске (например Wambold von Umstadt, Anselm Kasimir, 1583-1647 (Zeit, Lebensdaten)).

По некоторым причинам я был неспособен использовать Scrapy. Я полагаю, что я мог бы найти решение в BeautifulSoup .

+0

Вы хотите только ссылку href? – Hackaholic

+0

Фактически, мне нужен промежуток, связанный с ссылкой href, например Theologia Germanica: Libellus Aureus Hoc Est Brevis Et Praegnans Quomodo Sit Exuendus Vetus Homo Induendusque Novus user2278505

ответ

0

Попробуйте использовать:

soup.find_all("td", class_="rec_title_ppnlist") 

и посмотреть, если это исправляет проблему подсчета

для второго использования вопроса. om.get_text() для каждого элемента в списке om.

+0

Спасибо. Что касается первой части, то вы предлагаете повторные записи. То, что мне действительно нужно, - это достичь диапазона. – user2278505

+0

Просто используйте soup.select («div> span») – Maksim

0

насчет

from bs4 import BeautifulSoup 
from urlparse import urlparse, parse_qs 

html = ''' 
<html> 
<body> 
<table> 
<tr> 
<td class="rec_title_ppnlist"> 
<div><a class=" link_gen " href="SHW?FRST=0">Wambold von Umstadt, Anselm Kasimir, 1583-1647 (Zeit, Lebensdaten)</a></div> 
<div><a class=" link_gen " href="SHW?FRST=1">Wambold von Umstadt, Anselm Kasimir, 1583-1647 (Zeit, Lebensdaten)</a></div> 
<div class="rec_sep"><img alt="" border="" height="1" src="http://gsowww.gbv.de/images/gui/empty.gif" title="" width="1"/></div> 
</td>, 
<td class="rec_title_ppnlist"> 
<div><a class=" link_gen " href="SHW?FRST=2">Vomelius, Cyprianus, 1535-1587 (Zeit, Wirkungsdaten)</a></div> 
<div><a class=" link_gen " href="SHW?FRST=2">Vomelius, Cyprianus, 1535-1587 (Zeit, Wirkungsdaten)</a></div> 
<div class="rec_sep"><img alt="" border="" height="1" src="http://gsowww.gbv.de/images/gui/empty.gif" title="" width="1"/></div>. 
<div><a class=" link_gen " href="SHW?FRST=3">Wambold von Umstadt, Anselm Kasimir, 1583-1647 (Zeit, Lebensdaten)</a></div> 
<div><a class=" link_gen " href="SHW?FRST=4">4Vomelius, Cyprianus, 1535-1587 (Zeit, Wirkungsdaten)</a></div> 
<div><a class=" link_gen " href="SHW?FRST=5">5Vomelius, Cyprianus, 1535-1587 (Zeit, Wirkungsdaten)</a></div> 
<div><a class=" link_gen " href="SHW?FRST=6">6Vomelius, Cyprianus, 1535-1587 (Zeit, Wirkungsdaten)</a></div> 
<div><a class=" link_gen " href="SHW?FRST=7">7Vomelius, Cyprianus, 1535-1587 (Zeit, Wirkungsdaten)</a></div> 
<div><a class=" link_gen " href="SHW?FRST=8">8Vomelius, Cyprianus, 1535-1587 (Zeit, Wirkungsdaten)</a></div> 
<div><a class=" link_gen " href="SHW?FRST=9">9Vomelius, Cyprianus, 1535-1587 (Zeit, Wirkungsdaten)</a></div> 
<div><a class=" link_gen " href="SHW?FRST=10">10Vomelius, Cyprianus, 1535-1587 (Zeit, Wirkungsdaten)</a></div> 
<div><a class=" link_gen " href="SHW?FRST=11">11Vomelius, Cyprianus, 1535-1587 (Zeit, Wirkungsdaten)</a></div> 
<div><a class=" link_gen " href="SHW?FRST=12">12Vomelius, Cyprianus, 1535-1587 (Zeit, Wirkungsdaten)</a></div> 
<div><a class=" link_gen " href="SHW?FRST=13">13Vomelius, Cyprianus, 1535-1587 (Zeit, Wirkungsdaten)</a></div> 
<div><a class=" link_gen " href="SHW?FRST=25000">13Vomelius, Cyprianus, 1535-1587 (Zeit, Wirkungsdaten)</a></div> 
<div><a class=" link_gen " href="SHW?FRST=25001">13Vomelius, Cyprianus, 1535-1587 (Zeit, Wirkungsdaten)</a></div> 

</tr> 
</table> 
</html> 
''' 

soup = BeautifulSoup(html) 
tdefs = soup.find_all('td', {'class': 'rec_title_ppnlist'}) 

with open('data.txt', 'w') as outfile: 
    for tdef in tdefs: 
     links = tdef.find_all('a', {'class': 'link_gen'}) 
     for link in links: 
      url = urlparse(link['href']) 
      vals = url.query.split('=') 
      if vals[0] == 'FRST': 
       if(1 <= int(vals[1]) <= 25000): 
        print "%s %s" % (vals[1], link.get_text()) 
        outfile.write(link.get_text() + '\n') 

Я уверен, что та часть, где он читает строка запроса может быть приятнее (urlparse.parse_qs возвращает Dict из списка, мне кажется странным).

Этот код не проверяет правильность входных данных (например, ссылки имеют атрибуты href), но дает представление о том, как выполнить синтаксический анализ.

+0

спасибо, это выглядит красиво, однако по какой-то причине он повторяет людей. Поскольку я ранее комментировал, мне понадобился бы диапазон, связанный с ссылкой href. Любое предложение? – user2278505

+0

Это повторяет людей, потому что мои тестовые данные повторяют людей? Я вырезал и вставлял его. Есть номера, префикс которых позволяет дифференцировать. 'span' вы имеете в виду' div'? –

+0

В данных, указанных в вашем вопросе, нет тега span. Можете ли вы изменить свой вопрос, чтобы включить его? –

Смежные вопросы