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