手把手带你入门Python爬虫(二、爬虫预备知识)
爬蟲預備知識
- 一、計算機網絡協議基礎
- 二、Html、Css、Javascript
- Ajax 異步加載
- GET請求 與 POST請求
- 3種content-type
- 三、爬蟲基本方法
- 1. 采集方案分類
- 2. requests庫
- 3. 正則表達式
- 4. beautifulsoup用法
- 5. xpath基本語法
- 6. css選擇器提取元素
一、計算機網絡協議基礎
一個完整的網絡請求過程如下:
在瀏覽器輸入域名后,瀏覽器先訪問DNS服務器,DNS返回ip給瀏覽器,然后瀏覽器與web服務器建立TCP連接,瀏覽器就可以發送http請求,web服務器返回數據到瀏覽器,接下來就是瀏覽器解析內容的步驟。
七層網絡協議:
- 應用層 Http、ftp、pop3、DNS
- 表示層
- 會話層
- 傳輸層 TCP、UDP
- 網絡層 ICMP、IP、IDMP
- 數據鏈路層 ARP、RARP
- 物理層 物理傳輸介質
二、Html、Css、Javascript
網頁三要素:Html、Css、Javascript
Html是承載網頁內容的骨骼;
Css是網頁的樣式;
Javascript是網頁運行的腳本;
我們需要爬蟲的內容一般為網頁的部分HTML的內容,所以說可見即可得,只要在頁面上看得到的我們就可以爬到。
瀏覽器的加載過程:
構建DOM樹—子資源加載(加載外部的css、js、圖片等外部資源)—樣式渲染(css執行)
查找頁面元素一般通過DOM樹來查找:
Ajax 異步加載
有的數據是通過js向服務器發送請求,返回數據將數據通過js動態插入到頁面的,這種方式不會刷新頁面,用戶體驗效果好。
ajax返回的數據又可能是json格式,也可以是html頁面部分。
動態網頁和靜態網頁:
動態:數據是與后臺有交互的,可以變的(ajax)
靜態:數據不可變的(如果要變需要修改源代碼)
動態網頁體驗好,局部加載,對服務器好,擴展性好
靜態網頁有利于SEO
GET請求 與 POST請求
GET參數包含在URL中,POST通過request body 傳遞參數。
3種content-type
application/x-www-form-urlencoded
POST提交數據,瀏覽器原生form表單,如果不設置enctype屬性,那么最終就會以application/x-www-form-urlencoded方式提交數據。提交的數據按照key1=val1&key2=val2的方式進行編碼,key和val都進行了URL轉碼。
multipart/form-data
表單上傳文件。
application/json
告訴服務器消息主體是序列化后的JSON字符串。
三、爬蟲基本方法
1. 采集方案分類
一般我們采集網站只采集需要的指定的數據,采集方案分類:
2. requests庫
官方文檔地址:https://requests.readthedocs.io/zh_CN/latest/
安裝:
如果使用了虛擬環境,請確保在虛擬環境再安裝一遍,保證使用了虛擬環境的項目正常運行
初探,爬一下百度頁面:
import requestsres = requests.get("http://www.baidu.com") print(res.text)百度頁面的html代碼就打印出來了:
后面具體項目再詳細介紹具體用法。
3. 正則表達式
正則表達式是為了更好的處理獲取的字符串,更方便的獲取我們需要的字符。
常用的正則語法:
| . | 匹配任意字符(不包括換行符) |
| ^ | 匹配開始位置,多行模式下匹配每一行的開始 |
| $ | 匹配結束位置,多行模式下匹配每一行的結束 |
| * | 匹配前一個元字符0到多次 |
| + | 匹配前一個元字符1到多次 |
| ? | 匹配前一個元字符0到1次 |
| {m,n} | 匹配前一個元字符m到n次 |
| \\ | 轉義字符 |
| [ ] | 字符集 |
| | | 邏輯或 |
| \b | 匹配位于單詞開始或結束位置的空字符串 |
| \B | 匹配不位于單詞開始或結束位置的空字符串 |
| \d | 匹配一個數字 |
| \D | 匹配非數字 |
| \s | 匹配任意空白 |
| \S | 匹配非任意空白 |
| \w | 匹配數字、字母、下劃線中任意一個字符 |
| \W | 匹配非數字、字母、下劃線中的任意字符 |
python使用正則,簡單提取生日:
import reinfo = "姓名:zhangsan 生日:1995年12月12日 入職日期:2020年12月12日"# print(re.findall("\d{4}", info)) match_result = re.match(".*生日.*?(\d{4})", info) print(match_result.group(1)) # 19954. beautifulsoup用法
(如果使用的是虛擬環境,需要先切換到虛擬環境進行安裝)
https://beautifulsoup.readthedocs.io/zh_CN/v4.4.0/
結果:
5. xpath基本語法
這里主要介紹Selector.
安裝:
python包下載:https://www.lfd.uci.edu/~gohlke/pythonlibs/
如果直接安裝lxml或scrapy安裝不成功可以去上面網站依次下載安裝包,然后通過pip安裝:
xpath使用路徑表達式在xml和html中進行導航。
簡單用法:
6. css選擇器提取元素
import requests from scrapy import Selectorbaidu = requests.get("http://www.baidu.com") baidu.encoding = "utf-8" html = baidu.textsel = Selector(text=html)imgs = sel.css("img").extract() for i in imgs:print(i)# <img hidefocus="true" src="//www.baidu.com/img/bd_logo1.png" width="270" height="129"> # <img src="//www.baidu.com/img/gs.gif">總結
以上是生活随笔為你收集整理的手把手带你入门Python爬虫(二、爬虫预备知识)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 台式机电脑配置单_游戏直播电脑配置要求2
- 下一篇: 刀剑神域动漫网页设计作品 学生表格布局网