Почему в этом примере не работает очистка по имени класса? - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь очистить таблицу от URL, но я могу только очистить это через id, а не class, хотя существует только один такой класс. Что-то не так с моим форматом? Я пробовал find или find_all и подобные варианты, но я не могу показаться чтобы выяснить, почему я получаю пустое значение list или None.

 url = 'https://www.us-proxy.org/'
soup = BeautifulSoup(requests.get(url).text, 'html.parser')
table  =soup.find("table" , { "class" : "table table-striped table-bordered dataTable"} )

Вот часть, которую я пытаюсь очистить

class="table table-striped table-bordered dataTable"

Ответы [ 3 ]

0 голосов
/ 25 июня 2019

Вы не можете выбрать таблицу, потому что класс dataTable динамически добавляется Javascript.Для выбора тегов я бы использовал CSS-селекторы, этот скрипт выбирает нужную таблицу:

import requests
from bs4 import BeautifulSoup

url = 'https://www.us-proxy.org/'

soup = BeautifulSoup(requests.get(url).text, 'lxml')

print(soup.select('table.table.table-striped.table-bordered'))

Отпечатки:

[<table cellspacing="0" class="table table-striped table-bordered" id="proxylisttable" width="100%"><thead><tr><th>IP Address</th><th>Port</th><th>Code</th><th class="hm">Country</th><th>Anonymity</th><th class="hm">Google</th><th class="hx">Https</th><th class="hm">Last Checked</th></tr></thead><tbody><tr><td>47.90.246.198</td><td>3128</td><td>US</td><td class="hm">United States</td><td>elite proxy</td><td class="hm">no</td>

... и т. Д.

0 голосов
/ 25 июня 2019

Комментарии повторного класса были сделаны.Посмотрите на возвращаемый HTML: есть идентификатор, который должен быть вашим предпочтительным методом для выбора, так как он более быстрый и, скорее всего, уникальный

import pandas as pd
import requests
from bs4 import BeautifulSoup as bs

r = requests.get('https://www.us-proxy.org/')
soup = bs(r.content, 'lxml')
table = soup.select_one('#proxylisttable')
table = pd.read_html(str(table))[0]
print(table)
0 голосов
/ 25 июня 2019

Может быть, попробовать массив для классов?

soup.find('table', {'class':['table','table-striped','table-bordered','dataTable']}

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