python 爬蟲學習二

2021-09-30 19:09:53 字數 3855 閱讀 6912

是一種按照一定的規則,自動地抓取**資訊的程式或者指令碼。爬蟲是通過網頁的鏈結位址來尋找網頁,從**某乙個頁面開始,讀取網頁的內容,找到在網頁中的其它鏈結位址,然後通過這些鏈結位址尋找下乙個網頁,這樣一直迴圈下去,直到把這個**所有的網頁都抓取完為止。

基本流程:

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樹的解析方式來解析。網頁解析器有正規表示式 直觀,將網頁轉成字串...