#python #web-scraping #beautifulsoup
#python #очистка веб-страниц #beautifulsoup
Вопрос:
Я использую Beautifulsoup4 для того, чтобы очистить информацию в github. Однако всякий раз, когда я пытаюсь получить данные внутри таблицы, программа просто возвращает теги таблицы открытия и закрытия.
from bs4 import BeautifulSoup as bs
import requests
import lxml
source = requests.get("https://github.com/bitcoin-dot-org/bitcoin.org/find/master").text
soup = bs(source, "lxml")
tbody = soup.find("tbody", class_= "js-tree-finder-results js-navigation-container js-active-navigation-container")
print(tbody)
Это то, что он возвращает:
<tbody class="js-tree-finder-results js-navigation-container js-active-navigation-container">
</tbody>
И вот исходный код по ссылке на github (это только та часть, которая касается проблемы):
<tbody class="js-tree-finder-results js-navigation-container js-active-navigation-container"><tr class="js-navigation-item tree-browser-result" aria-selected="false">
<td class="icon"><svg class="octicon octicon-chevron-right" viewBox="0 0 8 16" version="1.1" width="8" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.5 8l-5 5L1 11.5 4.75 8 1 4.5 2.5 3l5 5z"></path></svg></td>
<td class="icon"><svg class="octicon octicon-file" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M6 5H2V4h4v1zM2 8h7V7H2v1zm0 2h7V9H2v1zm0 2h7v-1H2v1zm10-7.5V14c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V2c0-.55.45-1 1-1h7.5L12 4.5zM11 5L8 2H1v12h10V5z"></path></svg></td>
<td>
<a class="css-truncate-target js-navigation-open js-tree-finder-path" href="https://github.com/bitcoin-dot-org/bitcoin.org/blob/master/.gitattributes">.gitattributes</a>
</td>
</tr><tr class="js-navigation-item tree-browser-result" aria-selected="false">
<td class="icon"><svg class="octicon octicon-chevron-right" viewBox="0 0 8 16" version="1.1" width="8" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.5 8l-5 5L1 11.5 4.75 8 1 4.5 2.5 3l5 5z"></path></svg></td>
<td class="icon"><svg class="octicon octicon-file" viewBox="0 0 12 16" version="1.1" width="12" height="16" aria-hidden="true"><path fill-rule="evenodd" d="M6 5H2V4h4v1zM2 8h7V7H2v1zm0 2h7V9H2v1zm0 2h7v-1H2v1zm10-7.5V14c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V2c0-.55.45-1 1-1h7.5L12 4.5zM11 5L8 2H1v12h10V5z"></path></svg></td>
<td>
<a class="css-truncate-target js-navigation-open js-tree-finder-path" href="https://github.com/bitcoin-dot-org/bitcoin.org/blob/master/.gitignore">.gitignore</a>
</td>
</tr></tbody>
Я уже пытался использовать разные анализаторы, а также я пытался использовать urblib3 вместо запросов для получения исходного кода, но оба способа дают мне тот же результат.
Комментарии:
1. получите доступ к свойству .text, т.е. tbody.text
2. таблица и ее содержимое создаются с помощью javascript, который beautifulsoup не может сгенерировать, вы можете захотеть заглянуть в библиотеки, такие как Selenium или PhantomJS, чтобы получить содержимое таблицы javascript
Ответ №1:
Вероятно, вы неправильно выполнили поиск по class
значению атрибута.Попробуйте использовать приведенное ниже class
значение атрибута.
from bs4 import BeautifulSoup as bs
import requests
import lxml
source = requests.get("https://github.com/bitcoin-dot-org/bitcoin.org/find/master").text
soup = bs(source, "lxml")
tbody = soup.find("tbody", class_= "js-tree-browser-result-template")
print(tbody)
Вывод:
<tbody class="js-tree-browser-result-template" hidden="">
<tr class="js-navigation-item tree-browser-result">
<td class="icon"><svg aria-hidden="true" class="octicon octicon-chevron-right" height="16" version="1.1" viewbox="0 0 8 16" width="8"><path d="M7.5 8l-5 5L1 11.5 4.75 8 1 4.5 2.5 3l5 5z" fill-rule="evenodd"></path></svg></td>
<td class="icon"><svg aria-hidden="true" class="octicon octicon-file" height="16" version="1.1" viewbox="0 0 12 16" width="12"><path d="M6 5H2V4h4v1zM2 8h7V7H2v1zm0 2h7V9H2v1zm0 2h7v-1H2v1zm10-7.5V14c0 .55-.45 1-1 1H1c-.55 0-1-.45-1-1V2c0-.55.45-1 1-1h7.5L12 4.5zM11 5L8 2H1v12h10V5z" fill-rule="evenodd"></path></svg></td>
<td>
<a class="css-truncate-target js-navigation-open js-tree-finder-path" href="/bitcoin-dot-org/bitcoin.org/blob/master"></a>
</td>
</tr>
</tbody>
Ответ №2:
Попробуйте это:
source = requests.get("https://github.com/bitcoin-dot-org/bitcoin.org/find/master").text
soup = bs(source, "lxml")
tbody = soup.find_all('tbody')[0]
print(tbody)