Python BS4表解析返回空列表

时间:2019-06-09 22:16:02

标签: python web-scraping beautifulsoup python-requests

我正在尝试通过以下链接解析代理表格 https://www.proxy-list.download/SOCKS5 使用inspect元素,我可以看到'tbody'元素中包含'tr'元素,而其中包含'td'元素。

但是,当我尝试访问这些代理并从每一行和每一列中提取代理时,就好像它们不存在一样。

它只返回一个空列表。

我尝试将lxml解析切换为html,并在没有类的情况下访问tbody。我只是不太确定为什么我可以打印'soup'变量并获取此输出

<tbody class="table-hover" id="tabli">
</tbody>

但不能从行等获得输出。

import requests
from bs4 import BeautifulSoup, NavigableString
from selenium import webdriver

#While Loop Control Variable to Make Sure We Get a Working Proxy
successful_access = False

#Pulls the HTML of Our Proxy Website
website_url = requests.get("https://www.proxy-list.download/SOCKS5")
#Makes a Soup Variable That Turns Raw HTML Into "Parse-able" Data
soup = BeautifulSoup(website_url.content,"lxml")
#Puts The Table Object Into The "table" Variable
table = soup.find('tbody', attrs={'class':'table-hover'})
rows = table.find_all('tr')
print(rows)

#Initializes an Empty List for All Proxies
proxy_list = []

#For Each Row in Our List of Rows, We Extract The IP Number and Port, Appending Them To Our List Of IPs
for row in rows:
    cols = rows.find_all('td')
    ip = cols[0]
    port = cols[1]
    fullip = ip + ":" + port
    proxy_list.append(fullip)

没有输出

print(rows)

行,并且自然地,“ proxy_list”列表也为空。

[]

1 个答案:

答案 0 :(得分:0)

使用返回该页面的json的API端点。刷新提供的网址时,可以在浏览器的“网络”标签中找到它。

import requests

r = requests.get('https://www.proxy-list.download/api/v0/get?l=en&t=socks5').json()
print(r[0]['LISTA'])

我喜欢这种格式,但是您可以使用熊猫吐出数据框

import requests
import pandas as pd

r = requests.get('https://www.proxy-list.download/api/v0/get?l=en&t=socks5').json()
df = pd.io.json.json_normalize(r[0]['LISTA'])
print(df)