Python爬蟲基礎 _曾佳豪
阿新 • • 發佈:2022-03-13
什麼是爬蟲?Python爬蟲架構
爬蟲:一段自動抓取網際網路資訊的程式,從網際網路上抓取對於我們有價值的資訊。
Python 爬蟲架構主要由五個部分組成,分別是排程器、URL管理器、網頁下載器、網頁解析器、應用程式(爬取的有價值資料)。
- 排程器:相當於一臺電腦的CPU,主要負責排程URL管理器、下載器、解析器之間的協調工作。
- URL管理器:包括待爬取的URL地址和已爬取的URL地址,防止重複抓取URL和迴圈抓取URL,實現URL管理器主要用三種方式,通過記憶體、資料庫、快取資料庫來實現。
- 網頁下載器:通過傳入一個URL地址來下載網頁,將網頁轉換成一個字串,網頁下載器有urllib2(Python官方基礎模組)包括需要登入、代理、和cookie,requests(第三方包)
- 網頁解析器:將一個網頁字串進行解析,可以按照我們的要求來提取出我們有用的資訊,也可以根據DOM樹的解析方式來解析。網頁解析器有正則表示式(直觀,將網頁轉成字串通過模糊匹配的方式來提取有價值的資訊,當文件比較複雜的時候,該方法提取資料的時候就會非常的困難)、html.parser(Python自帶的)、beautifulsoup(第三方外掛,可以使用Python自帶的html.parser進行解析,也可以使用lxml進行解析,相對於其他幾種來說要強大一些)、lxml(第三方外掛,可以解析 xml 和 HTML),html.parser 和 beautifulsoup 以及 lxml 都是以 DOM 樹的方式進行解析的。
- 應用程式:就是從網頁中提取的有用資料組成的一個應用。
工作原理:
一、爬蟲入門程式
import urllib.request import urllib.error url = "http://www.baidu.com" # 訪問網址 responsel = urllib.request.urlopen(url) # 獲取並列印響應的狀態碼 print(responsel.getcode()) print(responsel.read())
二、爬蟲程式新增data、header,然後post請求
1.新增data
import urllib from urllib importrequest #定義引數(字典型別) value = {"username":"18173554582","password":"*********"} #引數編碼 data = urllib.parse.urlencode(value).encode(encoding='UTF8') #定義url url = "http://passport.csdn.net/login?code=applets" #構造request req = request.Request(url,data) #開啟網頁 response = request.urlopen(req) #列印網頁內容 print(response.read())
2.新增header
import urllib.request url = "http://www.taobao.com" req = urllib.request.Request(url) # 新增請求頭 req.add_header("user-agent","Mozilla/5.0") # 開啟網址 response2 = urllib.request.urlopen(req) # 列印狀態碼 print(response2.getcode()) print(response2.read())
3.post請求
import requests # 匯入網路請求模組requests import json # 匯入json模組 # 字典型別的表單引數 data = { '1': '能力是有限的,而努力是無限的。', '2': '星光不問趕路人,時光不負有心人。' } #傳送網路請求 response = requests.post('http://httpbin.org/post', data=data) response_dict = json.loads(response.text)#將響應資料轉換為字典型別 print(response_dict)#列印轉換後的響應資料
三、爬蟲程式新增cookie
from urllib import request from http import cookiejar #定義cookie cookies = cookiejar.CookieJar() # 定義一個cookie處理器 hander = request.HTTPCookieProcessor(cookies) # 定義下載器cookie處理器作為引數傳進去 openner = request.build_opener(hander) # 下載頁面 response = openner.open("https://baidu.com") for itrm in cookies: print("name:"+itrm.name) print("value:"+itrm.value+"\n")
四、正則表示式
1.基礎語法
import re #定義正則規則=模式,r表示‘原生字元’ # pattern1 = re.compile(r'hello') #匹配字元,match函式會從第一個字元開始匹配 result1 = re.match(pattern1,"hello hello") if result1: print(result1) print(result1.group()) print(result1.span()) #-------點'.'表示任意字元(換行\n除外) pattern2 = re.compile(r'ab.d') result2 = re.match(pattern2,"abcd") print(result2)
2.re.match與re.search的區別:
re.match只匹配字串的開始,如果字串開始不符合正則表示式,則匹配失敗,函式返回None;而re.search匹配整個字串,直到找到一個匹配。
3.正則表示式中特殊符號、字串的含義: