日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

西刺代理python_Python四线程爬取西刺代理

發布時間:2023/12/10 python 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 西刺代理python_Python四线程爬取西刺代理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

import requests

from bs4 import BeautifulSoup

import lxml

import telnetlib #驗證代理的可用性

import pymysql.cursors

import random

import threading

BASEURL = 'http://www.xicidaili.com/' #西刺首頁

urls = [BASEURL+ 'nn/',BASEURL+'nt/',BASEURL+'wn/',BASEURL+'wt/']#西刺分組(more)的ip信息鏈接列表

#請求頭信息,必須有User-Agent

headers = {'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'}

#proxies = {'https': 'http://123.57.85.224:80', 'http': 'http://123.57.85.224:80'}

#獲得與數據庫的連接和游標

def get_cc():

# 連接MySQL數據庫

connection = pymysql.connect(host='127.0.0.1', port=3306, user='root', password='root', db='iptables',

charset='utf8', cursorclass=pymysql.cursors.DictCursor)

# 通過cursor創建游標

cursor = connection.cursor()

return connection,cursor

#保存ip_port到數據庫

def save_ip_port(ip_port):

connection,cursor = get_cc()

try:

sql = 'insert into iptable(ip_port) values("'+ip_port+'")'

cursor.execute(sql)

except:

print('保存'+ip_port+'失敗!!!!!')

else:

connection.commit()

connection.close()

#從數據庫獲得ip_port

def get_ip_port():

connection,cursor = get_cc()

sql_get_id = 'select id,ip_port from iptable'

cursor.execute(sql_get_id)

#fetchone()是查詢一條數據

id_list = cursor.fetchall()#得到所有的id的字典列表

i = random.randint(0,len(id_list)-1)

id_num = id_list[i]['id']

ip_port = id_list[i]['ip_port'] #獲得所有可用的代理

return id_num,ip_port#返回id和ip_port:192.168.1.2:8080

#刪除被封的ip_port

def del_ip_port(id_num):

connection,cursor = get_cc()

try:

sql = 'delete from iptable where id = ' + str(id_num)

cursor.execute(sql)

except:

print('刪除'+ip_port+'失敗!!!!!')

else:

connection.commit()

connection.close()

#獲得代理

def get_proxies(ip_port):#ip_port = '192.168.2.45:8088'

proxy_ip = 'http://' + ip_port

proxy_ips = 'https://' + ip_port

proxies = {'https': proxy_ips, 'http': proxy_ip}

return proxies

#獲得對應url分類的最大頁碼

def get_max_pagenum(url): #url是more(分類)的鏈接,/nn,/nt....

response = requests.get(url,headers = headers)

status_code = response.status_code

soup = BeautifulSoup(response.content,'lxml')

max_pagenum = soup.find('div',attrs = {'class':'pagination'}).find_all('a')[-2].string

max_pagenum = int(max_pagenum)

return max_pagenum

#驗證代理是否有用,ip_port = '192.168.2.45:8088'

#每得到一個ip_port都要進行驗證,如果可用則保存,否則拋棄

def verifyProxyList(ip_port):

url = 'http://www.baidu.com'

# proxies = { "http": "http://"+ ip_port }

host ,port = ip_port.split(':')

try:

# res = requests.get(url,headers = headers,proxies = proxies,timeout = 5.0)

telnetlib.Telnet(host, port=port, timeout=5)

except:

print('---Failur:' + ip_port)

else:

#ips.append(ip_port)#這里應該存儲到Redis等數據庫中

save_ip_port(ip_port)

def main(url,proxies):#這里是more的鏈接,/nn/1,/nn/2....

try:

response = requests.get(url,headers = headers,proxies = proxies,timeout = 5.0)

status_code = response.status_code #503說明ip被封

if(status_code != requests.codes.ok):#響應的不是正常狀態

#刪除舊的代理ip_port,這里還需要驗證是否有bug

old_ip_port = proxies['http'][7:]

del_ip_port(old_ip_port)

#修改代理,重新請求

id_num,ip_port = get_ip_port()

proxies = get_proxies(ip_port)

print(str(proxies))

return

soup = BeautifulSoup(response.content,'lxml')

results = soup.find_all('tr')#遍歷所有的tr

for result in results[1:]:#這里第一個tr子標簽是th,所以會報錯

tdlist = result.find_all('td')

ip_port = tdlist[1].string+':'+tdlist[2].string

verifyProxyList(ip_port)

except:

print('請求異常......')

class myThread(threading.Thread):

def __init__(self, threadID, name, url):

threading.Thread.__init__(self)

self.threadID = threadID

self.name = name

self.url = url

def run(self):

print('正在執行線程:'+self.name)#沒有驗證這一行的可行性

id_num,ip_port = get_ip_port()

proxies = get_proxies(ip_port)

max_pagenum = get_max_pagenum(self.url)

#print(max_pagenum)

for i in range(1,max_pagenum):

url = self.url + '/' + str(i)

main(url,proxies)

#4線程爬取西刺的ip代理池

if __name__ == '__main__':

t1 = myThread(1,"Thread-1",urls[0])

t2 = myThread(2,"Thread-2",urls[1])

t3 = myThread(3,"Thread-3",urls[2])

t4 = myThread(4,"Thread-4",urls[3])

t1.start()

t2.start()

t3.start()

t4.start()

t1.join()

t2.join()

t3.join()

t4.join()

手把手教你使用Python爬取西刺代理數據(下篇)

/1 前言/ 前幾天小編發布了手把手教你使用Python爬取西次代理數據(上篇),木有趕上車的小伙伴,可以戳進去看看.今天小編帶大家進行網頁結構的分析以及網頁數據的提取,具體步驟如下. /2 首頁分析 ...

Scrapy爬取西刺代理ip流程

西刺代理爬蟲 1. 新建項目和爬蟲 scrapy startproject daili_ips ...... cd daili_ips/ #爬蟲名稱和domains scrapy genspider ...

python scrapy 爬取西刺代理ip(一基礎篇)(ubuntu環境下) -賴大大

第一步:環境搭建 1.python2 或 python3 2.用pip安裝下載scrapy框架 具體就自行百度了,主要內容不是在這. 第二步:創建scrapy(簡單介紹) 1.Creating a p ...

python+scrapy 爬取西刺代理ip(一)

轉自:https://www.cnblogs.com/lyc642983907/p/10739577.html 第一步:環境搭建 1.python2 或 python3 2.用pip安裝下載scrap ...

python3爬蟲-通過requests爬取西刺代理

import requests from fake_useragent import UserAgent from lxml import etree from urllib.parse import ...

爬取西刺ip代理池

好久沒更新博客啦~,今天來更新一篇利用爬蟲爬取西刺的代理池的小代碼 先說下需求,我們都是用python寫一段小代碼去爬取自己所需要的信息,這是可取的,但是,有一些網站呢,對我們的網絡爬蟲做了一些限制, ...

爬取西刺網的免費IP

在寫爬蟲時,經常需要切換IP,所以很有必要自已在數據維護庫中維護一個IP池,這樣,就可以在需用的時候隨機切換IP,我的方法是爬取西刺網的免費IP,存入數據庫中,然后在scrapy 工程中加入tools ...

scrapy爬取西刺網站ip

# scrapy爬取西刺網站ip # -*- coding: utf-8 -*- import scrapy from xici.items import XiciItem class Xicispi ...

爬取西刺網代理ip,并把其存放mysql數據庫

需求: 獲取西刺網代理ip信息,包括ip地址.端口號.ip類型 西刺網:http://www.xicidaili.com/nn/ 那,如何解決這個問題? 分析頁面結構和url設計得知: 數據都在本頁面 ...

隨機推薦

UnitOfWork以及其在ABP中的應用

Unit Of Work(UoW)模式在企業應用架構中被廣泛使用,它能夠將Domain Model中對象狀態的變化收集起來,并在適當的時候在同一數據庫連接和事務處理上下文中一次性將對象的變更提交到數據 ...

AT指令(轉)

資料來自網絡 附錄AT指令簡編一. 一般命令1.AT+CGMI 給出模塊廠商的標識.2.AT+CGMM 獲得模塊標識.這個命令用來得到支持的頻帶(GSM 900,DCS 1800 或PCS 1900) ...

python-基礎介紹

一.Linux基礎?- 計算機以及日后我們開發的程序防止的服務器的簡單操作?二.Python開發?http://www.cnblogs.com/wupeiqi/articles/5433893.htm ...

hdu 4272 2012長春賽區網絡賽 dfs暴力 ***

總是T,以為要剪枝,后來發現加個map就行了 #include #include #include #in ...

winform學習之----圖片控件應用(上一張,下一張)

示例1: int i = 0;??????? string[] path = Directory.GetFiles(@"C:\Users\Administrator\Desktop\圖片&q ...

01-android快速入門

adb Android debug bridge 安卓調試橋 創建模擬器,屏幕盡量小些,啟動速度運行速度快 Android項目的目錄結構 Activity:應用被打開時顯示的界面 src:項目代碼 R ...

用C寫一個web服務器(二) I/O多路復用之epoll

.container { margin-right: auto; margin-left: auto; padding-left: 15px; padding-right: 15px } .conta ...

Android開發之漫漫長途 Ⅵ——圖解Android事件分發機制(深入底層源碼)

該文章是一個系列文章,是本人在Android開發的漫漫長途上的一點感想和記錄,我會盡量按照先易后難的順序進行編寫該系列.該系列引用了以及

2015最新Android學習線路圖

Android是一個以Linux為基礎的半開源操作系統,主要用于移動設備,由Google和開放手持設備聯盟開發與領導.據2011年初數據顯示僅正式上市兩年的操作系統Android已經躍居全球最受歡迎的 ...

使用js如何設置、獲取盒模型的寬和高

第一種: dom.style.width/height 這種方法只能獲取使用內聯樣式的元素的寬和高. 第二種: dom.currentStyle.width/height 這種方法獲取的是瀏覽器渲染以 ...

總結

以上是生活随笔為你收集整理的西刺代理python_Python四线程爬取西刺代理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。