我正在尝试通过以下链接解析代理表格 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”列表也为空。
[]
答案 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)