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