Соскоб в сети с BeautifulSoup: найти текст вне тега - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь поиграть с BeautifulSoup, возвращая названия книг определенного результата поиска genlib:

from bs4 import BeautifulSoup
import requests
import re

url = "http://gen.lib.rus.ec/search.php?req=physics&lg_topic=libgen&open=0&view=simple&res=25&phrase=1&column=def"
soup = BeautifulSoup(requests.get(url).text, 'lxml')

for html in soup.find_all('tr', {'valign': 'top', 'bgcolor':'#C6DEFF'}):
    print(html.find('a', {'href': re.compile("book/index.php\?md5=.")}).text)

Соответствующий HTML:

<a href="book/index.php?md5=AAC0058748685BAEB782D1A156A2ED25" id="28" title="">
 Physics of life
 <br/>
 <font color="green" face="Times">
  <i>
   0444527982, 9780444527981, 9780080554648
  </i>
 </font>
</a>
<a href="book/index.php?md5=C892C74AEAC46715475EF5334302D751" id="48" title="">
 Physics and Chemistry Basis of Biotechnology
 <br/>
 <font color="green" face="Times">
  <i>
   9780306468919, 0306468913
  </i>
 </font>
</a>

Все работало нормально, кромевыходные данные включают некоторые нежелательные коды ISBN:

"""
Physics of life 0444527982, 9780444527981, 9780080554648

Physics and Chemistry Basis of Biotechnology 9780306468919, 0306468913

Lectures On Statistical Physics And Protein Folding [illustrated edition] 9812561439, 9789812561435, 9789812569387, 9812561501
...
"""

Я хочу избавиться от цифр, однако и названия книг, и цифры находятся внутри тегов <a></a>, а цифры находятся внутри<i></i> тегов.Мне сразу показалось, что я могу извлечь ISBN, поставив в конце «.i.text», но как я могу извлечь только названия книг?

Ответы [ 3 ]

0 голосов
/ 18 сентября 2018
for html in soup.find_all('tr', {'valign': 'top', 'bgcolor':'#C6DEFF'}):
    print(html.find('a', {'href': re.compile("book/index.php\?md5=.")}).next)

Next возвращает следующий текст тега в супе.

0 голосов
/ 19 сентября 2018

использовать find_next

for html in soup.find_all('tr', {'valign': 'top', 'bgcolor':'#C6DEFF'}):
    print(html.find('a', {'href': re.compile("book/index.php\?md5=.")}).find_next(text = True))
0 голосов
/ 18 сентября 2018

Я не уверен, есть ли элегантный способ извлечь название книги с Beautifulsoup.

Хотя можно легко обойти ISBN, а затем использовать функцию замены, чтобы заменить ISBN напустой строки.Затем очистите все пустые места с помощью функции полосы.

titleString.replace(isbnString, "").strip()

Замените: https://www.tutorialspoint.com/python/string_replace.htm

Полоса: https://www.tutorialspoint.com/python/string_strip.htm

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...