標籤(空格分隔):4.5python爬蟲
1. 理解爬蟲
2.怎麼爬取
3. 基礎概念
#二.網頁結構
1. html結構
<> 標籤
單標籤 <!doctype html >
2. html各標籤名
3. html樣式
1. 通常打開一個網址的步驟
2. python打開網址
導入模塊
import urllib
1.相當於打開了瀏覽器
from urllib import request
2.準備一個 url 地址
url = ‘http://www.baidu.com’
3.訪問網址,打開url (訪問網址),會返回響應結果
response=request.urlopen(url)
4.讀取結果
result = response.read() # read()讀取函數,此處爲還未解碼的str
print(result) # 查看結果(未解碼的str)
print(result.decode(‘utf-8’)) # 解碼
- 總結
from urllib import request 打開瀏覽器(導入模塊)
url = ‘http://www.baidu.com’ 準備網址(輸入網址)
response=request.urlopen(url) 使用模塊打開 url 返回訪問結果 (回車,訪問網址)
result = response.read()
print(result.decode(‘utf-8’)) 讀取並解密編碼
1.獲取網址
(1).打開網站—F12 或 檢測(右鍵單擊空白處)
(2).選取圖片方式
箭頭選定,成爲藍色圖標—選擇圖片
(3).獲取圖片地址
找到 src 標籤—雙擊—複製—得到該圖片網址
src 標籤—右鍵單擊—open in new tab(在新的網頁中打開)—圖片新網頁地址—複製
- 方法1 會出現網址不全的情況,大多以方法2爲主
2. python代碼操作
(1)導入模塊 and 函數
import urllib
from urllib import request
(3)打開網址
a=request.urlopen(url) # 調用request版塊的打開網址函數的urlopen(‘網址’)
(4)讀取內容(變量承接返回值 + 解碼)
b=a.read()
print(b)
print(b.decode(‘gbk’))
導入函數
from urllib import request
1. 下載
request.urlretrieve(‘http://pic.netbian.com/uploads/allimg/180302/230357-1520003037f447.jpg’,'1.jpg’)
- 路徑可能會不完整(以http開頭),會導致保存失敗
import random
from urllib import request
1. 把 url 包裝爲請求 request(url)
url=‘http://www.baidu.com’
req=request.Request(url)
2. 增加瀏覽器頭部的語法(網上搜索增加)
(1) 先獲取自己瀏覽器的信息
req.add_header(‘User-Agent’,‘Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36’)
(2)頭部語法(網絡搜索)
user_agent = [
「Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)」,
「Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; AcooBrowser; .NET CLR 1.1.4322; .NET CLR 2.0.50727)」,
「Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Acoo Browser; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.0.04506)」,
「Mozilla/4.0 (compatible; MSIE 7.0; AOL 9.5; AOLBuild 4337.35; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.50727)」,
「Mozilla/5.0 (Windows; U; MSIE 9.0; Windows NT 9.0; en-US)」,
「Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)」,
「Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)」,
「Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)」,
「Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)」,
「Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6」,
「Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1」,
「Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0」,
「Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5」,
「Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.8) Gecko Fedora/1.9.0.8-1.fc10 Kazehakase/0.5.6」,
「Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11」,
「Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.20 (KHTML, like Gecko) Chrome/19.0.1036.7 Safari/535.20」,
「Opera/9.80 (Macintosh; Intel Mac OS X 10.6.8; U; fr) Presto/2.9.168 Version/11.52」
]
(3) 隨機取一個瀏覽器頭部
import random
req.add_header(‘User-Agent’,random.choice(user_agent))
- 需要導入 import random
ips = [
‘114.223.163.70:8118’,
‘116.7.176.75:8118’,
‘42.123.125.181:8088’,
‘175.165.145.179:1133’,
‘118.187.58.34:53281’
]
增加代理IP網站: https://www.xicidaili.com/(西刺代理)
檢測IP有效性網站: http://www.xdaili.cn/monitor(訊代理)
(4) 隨機使用一個瀏覽器訪問
proxy_support=request.ProxyHandler({‘https’:random.choice(ips)})
open = request.build_opener(proxy_support)
request.install_opener(opener)
(5) 訪問
result=request.urlopen(req)
(6) print()
print(result.read().decode(‘utf-8’))
#七 正則表達式
re.compile(‘表達式’)
默認情況下對大小寫敏感
is 代表 一個 is
abc 代表 一個 abc
[abc] 代表 abc 中的一個值即可
[a-z] 代表 a-z 中的一個值即可
[A-Z] 代表 A-Z 中的一個值即可
[0-9] 代表 0-9 中的一個數值
1[0-9] 代表 10-19 中的一個數值
元字符
雙\ 代表一個反斜槓
\d 表示 [0-9]中的一個字符
\D 表示一個 非 [0-9] 中的字符,非數字
\w 相當於[a-zA-Z0-9]
代表一個數字字母或者下劃線(python中包括中文)
\W 對小寫w取反
代表一個非 數字字母或者下劃線(python中包括中文) 的值
\s 一個空白字符
\S 一個非空白字符
. 匹配任意單個字符(除\n外)
. 表示一個 .
量詞(修飾前邊的那個值出現的次數)
x{n} 表示x連續出現 n次
a{3}相當於aaa
\d{2-5} 2-5個連續的數字
{1,} 一次以上
{0,} 0次以上
{0,1} 0次或者1次
相當於{1,} 一次以上
相當於{0,} 0次以上
? 相當於{0,1} 0次或者1次,有或者沒有
其他
(456) 一個整體456
| 在()內代表或