获得代理ippython_Python自动获取代理IP
最近在FreeBuf網站上幾經瀏覽與嘗試過后,發現用Python自動獲取代理IP地址的方法,感覺不賴,然后自身又無啥技術,所以想先從分析他人的程序入手進行學習,增進技藝。在此感謝 i春秋作家-Mochazz(freebuf作者),在他們這些大佬身上學到了許多,感謝互聯網,希望看見自己成長。
代碼
from bs4 import BeautifulSoup
import requests
import os
url = "http://www.xicidaili.com/nn/1"
#注意復制粘貼的HEADERS里不能有奇異的符號
headers = {'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.62 Safari/537.36'}
r = requests.get(url=url,headers=headers)#requests庫get方法獲取HTML網頁
soup = BeautifulSoup(r.text,"lxml")
#bs中的select方法通過類名查找,組合查找。 (".odd > td:nth-of-type(n)")是指class為odd的標簽里的第n個類型為td的子標簽
server_address = soup.select(".odd > td:nth-of-type(4)")
ip_list = soup.select(".odd > td:nth-of-type(2)") #select對象返回的是列表
ports = soup.select(".odd > td:nth-of-type(3)")
for server,ip in zip(server_address,ip_list): #zip函數接受任意多個可迭代對象作為參數,將對象中對應的元素打包成一個tuple,后以列表形式輸出。
if len(server.contents) != 1: #bs .contents方法可以將tag的子節點以列表的方式輸出
print(server.a.string.ljust(8),ip.string.ljust(20), end='') #ljust() 方法返回一個原字符串左對齊,并使用空格填充至指定長度的新字符串。
else:
print("未知".ljust(8), ip.string.ljust(20), end='')
delay_time = os.popen("ping -c 1 " + ip.string + " | awk 'NR==2{print}' -") #os.popen() 方法用于從一個命令打開一個管道
delay_time = delay_time.read().split("time=")[-1].strip("\r\n")
print("time = " + delay_time)
方法簡要awk'{pattern + action}'{filenames}
awk語言的最基本功能是在文件或者字符串中基于指定規則瀏覽和抽取信息。pattern表示AWK在數據中查找的內容,action則是匹配內容后所執行的一系列指令。
" | "符號把ping的操作對象與awk表示方法隔開。NR是awk的內置指令,表示已經讀出的記錄數,表示行號。NR ==2也就是取第二行。
2. strip() 方法用于移除字符串頭尾指定的字符(默認為空格或換行符)或字符序列。split()通過指定分隔符對字符串進行切片。
3.os.popen()函數方法用于從一個命令打開一個管道
總結
我知道LINUX下可以正常使用,但我在windows下的os.popen()函數無法解決問題,可能是我比較菜泥......還有想知道 delay_time = os.popen("ping -c 1 " + ip.string + " | awk 'NR==2{print}' -")這一行中的 “-”符號有什么用處,感謝
總結
以上是生活随笔為你收集整理的获得代理ippython_Python自动获取代理IP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 七牛云 转码_普通音视频转码(avthu
- 下一篇: 解析小型机、大型机和PC服务器间的差别