1. 程式人生 > 其它 >Python爬蟲基礎 _曾佳豪

Python爬蟲基礎 _曾佳豪

什麼是爬蟲?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 import
request #定義引數(字典型別) 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.正則表示式中特殊符號、字串的含義: