在此示例中,为什么不通过类名抓取有效?

时间:2019-06-25 00:04:23

标签: python-3.x beautifulsoup

我正在尝试从网址中抓取表格,但是我只能抓取 通过id而不是class进行访问,尽管只有一个这样的类。 我的格式有问题吗? 我已经尝试过findfind_all和类似的变体,但是我似乎无法 弄清楚为什么我找回一个空的list或无。

 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 :(得分:0)

也许为类尝试一个数组?

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

答案 1 :(得分:0)

您不能选择该表,因为类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>

...等等。

答案 2 :(得分:0)

已对课程进行了评论。看看返回的HTML:有一个ID应该是您选择的首选方法,因为它更快,更可能唯一。

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)