是一種按照一定的規則,自動地抓取**資訊的程式或者指令碼。爬蟲是通過網頁的鏈結位址來尋找網頁,從**某乙個頁面開始,讀取網頁的內容,找到在網頁中的其它鏈結位址,然後通過這些鏈結位址尋找下乙個網頁,這樣一直迴圈下去,直到把這個**所有的網頁都抓取完為止。
基本流程:
1、發起請求
通過http庫向目標站點傳送request,請求可以包含額外的headers等資訊,等待伺服器響應
2、獲取響應內容
3、解析內容
得到的內容可能是html,可以用正規表示式、網頁解析庫進行解析,json直接轉為json物件進行解析
4、儲存資料
儲存形式多樣,可以存為文字,也可以儲存至資料庫,或者儲存特定格式的檔案
例:
①先由urllib的request開啟url得到網頁html文件
②瀏覽器開啟網頁源**分析元素節點
③通過beautiful soup或則正規表示式提取想要的資料
④儲存資料到本地磁碟或資料庫(抓取,分析,儲存)
urllib.request官方文件
urllib.request.
urlopen
(url, data=none, [timeout, ]*, cafile=none, capath=none, cadefault=false, context=none)
重點部分是返回值, 這個函式返回乙個 http.client.httpresponse 物件, 這個物件又有各種方法, 比如我們用到的read()方法
**實現:用python簡單處理url,使用urllib開啟連線
import urllib
import urllib.request
data = {}
data['word'] = '三生三世十里桃花'
# 把乙個通俗的字串轉為url格式的字串
url_values = urllib.parse.urlencode(data)
url = ""
full_url=url+url_values
data = urllib.request.urlopen(full_url).read()
data=data.decode('utf-8')
print(data)
佇列與集合
from collections import deque
queue=deque(["eric","john","michael"])
print(queue)
queue.popleft()
print(queue)
python的集合
為了使爬過的**不會重複,所以使用set(),set()是一種無序的,不包含重複元素的結構
import re
import urllib.request
import urllib
from collections import deque
queue = deque()
visited = set()
url = '' # 入口頁面, 可以換成別的
cnt = 0
while queue:
url = queue.popleft() # 隊首元素出隊
visited |= # 標記為已訪問
print('已經抓取: ' + str(cnt) + ' 正在抓取
cnt += 1
urlop = urllib.request.urlopen(url)
if 'html' not in urlop.getheader('content-type'):
continue
# 避免程式異常中止, 用try..catch處理異常
try:
data = urlop.read().decode('utf-8')
except:
continue
# 正規表示式提取頁面中所有佇列, 並判斷是否已經訪問過, 然後加入待爬佇列
print('加入佇列 ---> ' + x)
在get時將user-agent新增至header
基礎理論知識:
http 報文分兩種:請求報文和響應報文:
http請求報文解析:
在get的時候新增header有很多方法
第一種:簡便但不宜擴充套件
req = urllib.request.request(url, headers = )
第二種:使用build_opener方法,用來自定義opener,好處是可以方便的擴充套件功能,如下**自動處理cookies的功能
使用requests來代替之前的urllib、 使用beautifulsoup來代替re模組
關於美麗湯beautifulsoup,方便在我們可以用tag class id 使用開發者工具來定位我們想要的東西,可以直接提取出正文資訊,也可以全文搜尋,同樣也支援正規表示式
官方文件beautifulsoup
(看文件很簡單,但是上手就不知道咋寫了,嚶嚶嚶~)
關於beautifulsoup的栗子:爬取csdn首頁的
from bs4 import beautifulsoup
from urllib.request import urlopen
html = urlopen("").read().decode('utf-8')
soup = beautifulsoup(html,"html.parser")
titles = soup.select("h3[class='company_name'] a") #css選擇器
for title in titles:
print(title.get_text(),title.get('href')) # 標籤題 標籤屬性
顯示爬取結果: Python 爬蟲學習(二)
這一篇我們來學習如何對多頁的網路進行資訊爬取。在平時網頁瀏覽時不少看見許多網頁是有多頁的,像這樣 當我們不斷換頁時,我們會發現什麼呢?沒錯,看破真相的是乙個外表看似小孩,智慧型卻過於常人的.第三頁 第四頁 第五頁 def get info url,data none wb data requests...
Python網路爬蟲學習(二)
十五.京東商品頁面的爬取 import requests r requests.get r.status code r.encoding r.text 1000 十六.亞馬遜商品頁面的爬取 import requests def main url try kv r requests.get url,...
爬蟲二 Python爬蟲入門二
1.認識爬蟲 1.1 什麼是爬蟲 爬蟲 一段自動抓取網際網路資訊的程式,從網際網路上抓取對於我們有價值的資訊。1.2 python的爬蟲架構 網頁解析器 將乙個網頁字串進行解析,可以按照我們的要求來提取出我們有用的資訊,也可以根據dom樹的解析方式來解析。網頁解析器有正規表示式 直觀,將網頁轉成字串...