Python3爬蟲(1)小試牛刀
阿新 • • 發佈:2019-02-15
最近學習了python3的爬蟲機制!也就是通過使用urllib模組傳送http請求來獲取網頁的html原始碼,然後使用正則匹配出自己想要收集的資訊!(注意python2中所用的模組不一樣)
下面小試牛刀,做了一個例子!附上需求和原始碼!
需求:分頁爬取網頁上的ip地址資訊
儲存形式:(將從網頁上獲取到的資訊分行寫入.txt檔案中)
程式碼邏輯
#引入urllib模組,用於發起http請求 from urllib import request #引入re模組,用於正則匹配 import re #建立一個檔案物件(w+追加寫入模式) file = open('ips.txt', 'w+', encoding='utf-8') def get_html_66ip(): #通過定義headers中的User-Agent偽裝成一個browser,如果不定義headers,User-Agent會被預設解析成python3 urllib headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36' } # 66代理,全國代理ip(2018年驗證ip,前89頁) for page_num in range(1,90): target = 'http://www.66ip.cn/{}'.format(page_num) r_obj = request.Request(url=target,headers=headers) response = request.urlopen(r_obj) html = response.read().decode('gbk') # print(html) pat_html = re.compile(r'<tr><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td><td>(.*?)</td></tr>',re.S) #這裡注意使用findall取出的資料res是一個列表,列表的每個元素是元組,即[('xxx','xxxx'),('xxxx','xxxxx')] res = pat_html.findall(html) #判斷匹配出的資訊,第一行表頭不要 ips = [] for k,v in enumerate(res): if k != 0: ips.append(v) #將元組轉成str,去除首尾的'('和')'寫入檔案 for v in ips: file.write(str(v).lstrip('(').rstrip(')') + '\n') #程序啟動宣告(程式從這裡開始執行) if __name__ == '__main__': #呼叫爬取def get_html_66ip() #關閉檔案物件 file.close()