1. 程式人生 > >Python之爬取IP代理網站

Python之爬取IP代理網站

本篇是利用python的re庫和requests庫一些知識來抓取某IP代理網站的各種IP資訊,並將其存入txt檔案中. 不多說,附上程式碼及其結果(ps:由於初次學習,程式碼有許多需要改進的地方,不足之處,大家自動忽略…..)

import requests,re
header={}
header['user-agent']='Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36'            
url='http://www.xxxxxx.com'
html=requests.get(url,headers=header) p=re.compile('((?:\d+?\.){3}\d+?)(?:.*?<td>(.*?)</td>)(?:.*?<td>(.*?)</td>)(?:.*?<td>(.*?)</td>)(?:.*?<td>(.*?)</td>)(?:.*?<td>(.*?)</td>)',re.S) result=p.findall(html.text) with open(r'C:\Users\804862153\Desktop\Spider_IP.txt'
,'a') as f: f.write(' IP代理'+' '+'埠號'+' '+'所屬地區'+' '+'通訊協議'+' '+'有效時間'+' '+'上線時間'+'\n') if html.status_code==200: for results in result: list(results) for x in results: if x=='': x='無法獲知' with open(r'C:\Users\804862153\Desktop\Spider_IP.txt'
,'a') as f: f.writelines(x+' ') with open(r'C:\Users\804862153\Desktop\Spider_IP.txt','a') as f: f.writelines('\n') print('IP代理抓取成功!') else: print('error!')

說說我在寫爬蟲時遇到的一些小問題(就是這些不太容易發現的小問題,耗費了我大量的時間,大家借鑑下,免得以後和我一樣在這些方面耗費大量的時間) 首先就是在使用requests.get時,發現該網站如果不改請求頭裡user-agent的值,就無法抓取,因此用了以下程式碼解決該問題,不懂的大家利用搜索引擎自行查詢.

header={}
header['user-agent']='Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.92 Safari/537.36'            

在這裡給大家說說有關請求頭和響應頭的一些問題:

  1. requests.get(url,headers=header) 首先header是一個字典,提供的是請求頭的資訊,也就是說headers修改的是請求頭,而不是響應頭,大家先記住,下面還有一些資訊需要和這個加以區別。
  2. response.headers和response.request.headers response是requests.get()返回的物件,response,headers獲取的是響應頭資訊,response.request.headers獲取的是請求頭資訊。
  3. 正則表示式的一些問題 我在寫正則表示式的時候遇到了一個問題,特別小但是害我看了一晚上python程式碼都沒注意到,大家知道html標籤末尾要加/吧,注意是 \ ,是除號,而不是反斜槓,就是這個極小的問題,害的python執行在執行又不報錯,弄得我雲裡霧裡,想了好多原因,都沒發現,直到第二天早上再次看了一遍,才發現的,一個小小的問題耗費大量時間去發現,這裡給大家說希望不要和我一樣犯這個錯。
  4. 檔案讀寫問題 在程式碼執行沒有出錯之後,開始將爬取到的內容寫入txt檔案,但這一步又出問題了,由於我讀取的內容是元素為元組的列表,而且f.write()裡面只能有一個argument,所以我在第一次迭代的條件下又迭代了一次。另:由於html標籤裡,有些沒有提供IP所在區域,即內容為空,我又將元組轉化為列表,將內容改為無法或知。

最後附上本次抓取的IP代理資訊,如圖: 這裡寫圖片描述

發表的部落格是我用於學習和複習的筆記,會隨著python知識的深入,不斷進行實戰,成功之後,將會不斷更新該部落格,有興趣的可以一起參與討論。ps:學到哪寫到哪