欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

python3輕量級爬蟲

系統 1624 0

文章目錄

  • 一.爬蟲簡介
  • 二.簡單爬蟲架構
  • 三.URL管理器
    • 3.1 url管理器應具有的最小功能:
    • 3.2 實現方式
  • 四.網頁下載器
    • 4.1 urllib簡單的獲取一個網頁。
    • 4.2 使用Request
    • 4.3 添加特殊情景的處理
  • 五.網頁解析器
    • 5.1 安裝beautifulsoup4
    • 5.2 beautifulsoup語法
    • 5.3 示例代碼:
  • 六.完整實例
    • 6.1 分析目標

為什么是輕量級爬蟲?因為復雜的爬蟲需要考慮的場景和問題非常的多,比如有些網頁需要登錄后才能訪問、而有些網頁使用javascript異步加載完成。輕量級爬蟲爬取的是不需要登錄的靜態網頁抓取。

一.爬蟲簡介

  • 爬蟲是一段自動抓取互聯網信息的程序,從一個url觸發訪問所關聯的所有url,并且從每個頁面中提取出有價值的數據。
  • 價值:互聯網數據,為我所用。可以對數據進行分析,甚至可以基于數據做出自己的產品,比如更專業的新聞閱讀聚合器,最爆笑故事app,最漂亮美女圖片網,圖書對比價格網,python技術文章大全。

二.簡單爬蟲架構

首先需要一個爬蟲調度端,來啟動爬蟲、停止爬蟲、或者監視爬蟲的運行情況。在爬蟲架構中有三個模塊:

  • URL管理器:將要爬取的URL和已經爬取過的URL
  • 網頁下載器:將網頁下載下來存儲成一個字符串
  • 網頁解析器:解析字符串,一方面提取有價值的數據,另一方面提取訪問其他頁面的URL
調度器 URL管理器 下載器 解析器 應用 有待爬URL? 是/否 獲取1個待爬取URL URL 下載URL內容 URL內容 解析URL內容 價值數據、新URL列表 收集價值數據 新增到待爬取URL loop [ 有待爬取URL? ] 調度器 URL管理器 下載器 解析器 應用

三.URL管理器

管理待抓取URL集合和已抓取URL集合,防止重復抓取、循環抓取。

3.1 url管理器應具有的最小功能:

  • 添加新url到待爬取集合
  • 判斷待添加url是否在容器中
  • 判斷是否還有待爬取url
  • 獲取待爬取url
  • 將url從待爬取移動到已爬取

3.2 實現方式

  • 放在內存中set()集合。待爬取set(),已爬取set()
  • 存放在關系數據庫中urls(url,is_crawled)
  • 存放在緩存數據庫中,比如redis,本身支持set數據結構。大公司一般都使用緩存數據庫

四.網頁下載器

將互聯網上URL對應的網頁下載到本地的工具

  • urllib.request:直接的網頁下載,或者提交一些向網業輸入的數據,甚至支持需要登錄網頁的cookie處理,需要代理訪問的代理處理等。
  • requests:第三方包,提供更強大的功能

4.1 urllib簡單的獲取一個網頁。

爬取百度首頁就出錯。。。試了幾種方法,只有(‘gbk’,‘ignore’)有用,并且是偶爾正常顯示。爬取其他網頁就很順利,不知道是百度厲害,還是代碼太low。最終解決,在第一行添加如下代碼即可。。。不過也是是好是壞。

            
              
# -*- coding: UTF-8 -*- 
或
#coding=utf-8

            
          
  1. urlopen()參數
    • url: 需要打開的網址
    • data:Post提交的數據
    • timeout:設置網站的訪問超時時間,單位秒
  2. urlopen返回對象提供方法:
    • read() , readline() ,readlines() , fileno() , close() :對HTTPResponse類型數據進行操作
    • info():返回HTTPMessage對象,表示遠程服務器返回的頭信息
    • getcode():返回Http狀態碼。如果是http請求,200請求成功完成;404網址未找到
    • geturl():返回請求的url

4.2 使用Request

  • 用來包裝頭部的數據:
    • User-Agent :這個頭部可以攜帶如下幾條信息:瀏覽器名和版本號、操作系統名和版本號、默認語言
    • Referer:可以用來防止盜鏈,有一些網站圖片顯示來源http://***.com,就是檢查Referer來鑒定的
    • Connection:表示連接狀態,記錄Session的狀態。

4.3 添加特殊情景的處理

HTTPCookieProcessor,ProxyHandler,HTTPHandler,HTTPRedirectHandler生成handler

            
              # -*- coding: UTF-8 -*-
import urllib.request
from http import cookiejar

url = "http://www.baidu.com"
print("第一種方法")
response1 = urllib.request.urlopen(url)
print(response1.getcode())
print(len(response1.read()))

print("第二種方法")
request=urllib.request.Request(url)
request.add_header("user-agent","Mozilla/5.0")
response2=urllib.request.urlopen(request)
print(response2.getcode())
print (len(response2.read()))


print("第三種方法")
cj=cookiejar.CookieJar()
opener=urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
urllib.request.install_opener(opener)
response3=urllib.request.urlopen(url)
print(response3.getcode())
print(cj)
print(response3.read())


            
          

五.網頁解析器

從網頁中提取有價值的數據的工具

  • 正則表達式,字符串匹配的模糊匹配,比較直觀,但是麻煩
  • html.parser自帶
  • Beautifulsoup插件,結構化解析-DOM樹
  • lxml插件

5.1 安裝beautifulsoup4

可以import bs4即安裝成功。查看官方文檔

5.2 beautifulsoup語法

創建Beautifulsoup對象,搜索節點find_all、find(參數一樣),訪問節點名稱、屬性、文字

            
              例如:

              
                python
              
              

節點名稱:a
節點屬性:href='123.html' class='article_link'
節點內容:python

#創建
soup = BeautifulSoup(html_cont, 'html.parser',from_encoding='utf-8')


#查找節點a
soup.find_all('a')
#查找節點a,鏈接符合/view/123.html形式的節點
soup.find_all('a',herf='/view/123.html')
soup.find_all('a',herf=re.compile(r'/view/\d+\.html'))#可以用正則表達式替代
#查找節點div,class為abc,文字為python的節點
node = soup.find_all('div',class_='abc', string='python')

#訪問節點信息
node.name #標簽名稱
node['href'] #標簽屬性
node.get_text() #文字內容

            
          

5.3 示例代碼:

            
              # coding=utf8
from bs4 import BeautifulSoup
import re

html_doc = """

              
                The Dormouse's story
              
              

The Dormouse's story

Once upon a time there were three little sisters; and their names were Elsie , Lacie and Tillie ; and they lived at the bottom of a well.

...

""" soup = BeautifulSoup(html_doc, 'html.parser') print("打印所有內容") links = soup.find_all('a') for link in links: print(link.name, link['href'], link.get_text()) print("獲取lacie的連接") link_node = soup.find('a',) print(link_node.name, link_node['href'], link_node.get_text()) print("正則匹配") link_node = soup.find('a',href=re.compile(r"ill")) print(link_node.name, link_node['href'], link_node.get_text()) print("獲取段落文字") p_node = soup.find('p',class_="title") print(p_node.name, p_node.get_text())

六.完整實例

  • 目標:抓取百度百科Python詞條相關的1000條頁面數據。
  • 分析目標:URL格式,數據格式,網頁編碼
  • 編寫代碼
  • 最后執行爬蟲

6.1 分析目標

            
              - 目標:百度百科python詞條相關詞條網頁-標題和簡介
- 入口頁:https://baike.baidu.com/item/Python/407313
- url格式:/item/接口/15422203
- 數據格式:
    - 標題 
              

...

...
- 簡介
...
- 頁面編碼:UTF-8

查看代碼


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 成人黄色在线 | 一区二区三区四区免费 | 日韩中文视频 | 欧美日韩在线免费观看 | 99久久精品久久久久久清纯 | 亚洲欧美久久婷婷爱综合一区天堂 | 九九re6精品视频在线观看 | 毛片在线看片 | 日韩精品亚洲专区在线电影不卡 | 波多野结衣一区二区 | 三上悠亚2022年最新番号 | 国产成人自拍一区 | 特黄特色大片免费视频大全 | 欧美一区二区三区在线观看视频 | 色综合久久天天综合绕观看 | 国产精品久久久久影视青草 | 国产小视频在线观看免费 | 亚洲欧美日韩精品中文乱码 | 成人免费在线 | 狠狠操狠狠干 | 污视频在线免费观看 | 午夜影院18 | 成年人在线播放视频 | 国产色吧 | 免费视频一区 | 国产高清在线视频 | 亚洲在线播放 | 69pao强力打造免费高清 | 毛片一级在线 | 日韩精品在线视频 | 国产亚洲精品久久久久久无码网站 | 国产真实乱子伦清晰对白 | 日韩免费一区 | 日韩精品一区二区三区中文字幕 | 国产 日韩 欧美 亚洲 | 欧美黄色第一页 | 国产色在线 | 日韩一级a毛片欧美一级 | 欧美电影网 | 91高清视频在线 | 欧美 亚洲 一区 |