python通过ip池爬_如何自建PYTHON爬虫代理IP池
3. 具體介紹
獲取兔子IP及檢測IP并入庫
涉及腳本:
work_spider.py
get_proxies_base_spider.py
_request.py
proxy_basic_config.py
custom_get_ip下的腳本
work_spider.py
入口腳本
從 get_proxies_base_spider。py 中繼承SpiderMain。 在WorkSpider類中重寫父類的run方法,在其中可以 傳入自定義的請(qǐng)求函數(shù), 若沒有, 則使用默認(rèn)的上述框架中的請(qǐng)求函數(shù)。
get_proxies_base_spider.py
主程序
提供了默認(rèn)的ip的獲取, 檢測, 入庫函數(shù)。其中,解析函數(shù)可以自定義。
包括的方法:
run
啟動(dòng)函數(shù), 啟動(dòng)請(qǐng)求框架的線程池, 調(diào)用craw函數(shù);
craw
開始爬取函數(shù), 對(duì)配置中的配置項(xiàng)目進(jìn)行讀取,發(fā)起初始請(qǐng)求;
get_and_check
獲取返回的源代碼, 并調(diào)用解析函數(shù);
parse_to_get_ip
默認(rèn)的解析函數(shù), 用戶可通過配置自定義。解析出原始IP, 然后調(diào)用檢測函數(shù);
start_check
開始檢測函數(shù), 其中檢測的函數(shù)為_request。py中的valid函數(shù); save_ip
檢測成功的入庫函數(shù), 將檢測成功的數(shù)據(jù)放入mongodb數(shù)據(jù)庫中;
_request.py
檢測腳本程序
包括的方法:
valid
檢測函數(shù), 因?yàn)橐险?qǐng)求框架的要求,所以自定義的這個(gè)函數(shù)需要返回兩個(gè)值, 在這里返回了 響應(yīng)時(shí)間與檢測的IP。
proxy_basic_config.py
代理網(wǎng)頁設(shè)置腳本
包括的字段:
target_urls
待檢測的目標(biāo)網(wǎng)站, list類型;
collection_name
mongodb數(shù)據(jù)庫的集合名, 字符串類型;
**over_time **
數(shù)據(jù)庫中IP存活時(shí)間閥值, 超過及對(duì)其重新檢測, int類型, 默認(rèn)1800秒;
url_parse_dict
代理IP網(wǎng)址配置字典, 字典類型
下面將對(duì)這一配置字典作著重介紹:
(1) 格式
{ip_website_name: value}
ip_website
代理IP網(wǎng)站的名字, 如tuziip
value
其他設(shè)置值, 字典類型
(2) value
因?yàn)関alue是一個(gè)內(nèi)嵌的字典,所以其也有自己的鍵和值。
[1] status
代理狀態(tài), 若不想爬取此網(wǎng)站,可以將status設(shè)置為非active的任意值, 必須;
[2] request_method
請(qǐng)求方法, 當(dāng)為post的時(shí)候, 必須定義提交的submit_data, 否則會(huì)報(bào)錯(cuò)。默認(rèn)為get, 非必須。
[3] submit_data
提交的數(shù)據(jù),因項(xiàng)目的特殊性,如需要提交的數(shù)據(jù)里面帶著網(wǎng)頁頁碼字段,所以為了獲得 多頁的數(shù)據(jù), 這里就需要定義多個(gè)post_data數(shù)據(jù),然后分別進(jìn)行請(qǐng)求。所以在這里將submit_data 定義為列表, 里面的數(shù)據(jù)為字典格式。
[4] url
代理IP網(wǎng)址, 列表類型, 把需要爬取的頁面都放在里面,必須。
[5] parse_type
解析類型, 默認(rèn)提供: xpath, re。 如果你需要?jiǎng)e的解析方式, 那么請(qǐng)定義自己的parse_func。默認(rèn)的解析函數(shù)即上文中的[parse_to_get_ip] 只提供xpath與re兩種解析獲取IP的方式。當(dāng)使用默認(rèn)解析器的時(shí)候, 必須定義。
[6] ip_port_together
ip和port是否在一個(gè)字段中, 若是則設(shè)置為True, 不是則設(shè)置為False, 當(dāng)使用re進(jìn)行解析和使用了自定義的解析函數(shù)時(shí),非必須。
若為地址與端口在一起,且通過xpath解析時(shí)則建議 [parse_method]中 的key為ip_address_and_port
若為地址與端口不在一起,且通過xpath解析時(shí)則建議 [parse_method] key為ip_address, ip_port
[7] parse_method
解析的具體路徑, 上一條有了部分的解釋, 當(dāng)使用默認(rèn)解析器時(shí),必須定義。
當(dāng)通過re進(jìn)行解析時(shí), 則ip_port_together可以為任意的值,parse_method中只有一個(gè)鍵: _pattern
[8] parse_func
解析函數(shù), 默認(rèn)值為system, 當(dāng)需要使用自定義的解析函數(shù)的時(shí)候, 需要顯式的定義該字段為自定義的解析函數(shù), 自定義的解析函數(shù)必須要有四個(gè)參數(shù), 分別為value, html_content, parse_type, website_name, 后面有詳細(xì)解釋
[9] header
因網(wǎng)址較多, 所以在這里可以自定義瀏覽器頭, 非必須。
*custom_get_ip下的文件
自定義解析函數(shù)
在這里以get_ip_from_peauland.py為例
通常, 如果你因?yàn)榇鞩P網(wǎng)站的特殊性而需要自定義一個(gè)解析函數(shù), 那么你可以在custom_get_ip文件夾下定義腳本
定義的腳本中必須定義解析函數(shù), 并在配置腳本proxy_basic_config。py中該網(wǎng)站對(duì)應(yīng)的設(shè)置中將parse_func設(shè)置為你定義的解析函數(shù)
在這里最好為需要自定義解析的網(wǎng)站寫一個(gè)獨(dú)立的腳本, 這樣利于維護(hù), 將需要自定義的值都放在其中, 然后在設(shè)置 腳本中進(jìn)行導(dǎo)入和定義。
具體的解釋可以參考上面腳本中的注釋。
總結(jié)
以上是生活随笔為你收集整理的python通过ip池爬_如何自建PYTHON爬虫代理IP池的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Comsol学习——经典案例:水净化反应
- 下一篇: python车牌识别使用训练集_Tens