1. python爬蟲--正則表達式1

1. python爬蟲–正則表達式1

標籤(空格分隔):4.5python爬蟲


一 python爬蟲

1. 理解爬蟲

image_1cv8aprrm6h618k41sv91c6j1ru313.png-72.1kB

image_1cv8as3jvekk1teabqmp811ebj1g.png-189.8kB

2.怎麼爬取
image_1cv8ats4do2o1f1717a264dheq1t.png-149.8kB

3. 基礎概念
image_1cv8bkq92g49cm4ufp137k1c6k2a.png-99.7kB
image_1cv8blqbqs9m1j6t150qffl33i2n.png-184.3kB


#二.網頁結構

1. html結構

image_1cv8bns6f19vsn8lcdacom18u34.png-77kB

image_1cv8bovl61tif1g9v11mkolg1b5n3h.png-150.6kB

<> 標籤
單標籤 <!doctype html >

雙標籤


image_1cv8btipu40non9ekbh7fjpr4o.png-13.6kB

  • 網頁由標籤組成;
  • 不同的標籤有不同的內容;
  • 可以通過 tagname / id / class 找到某個標籤;

image_1cv8d98nv16nfc99101t71a1eaj7j.png-46.8kB

image_1cv8dbb57b5g1cii5s7dohle680.png-45.4kB

2. html各標籤名
image_1cv8bq8jehthl3g1uuo193o1g6p3u.png-186.3kB

3. html樣式
image_1cv8br97us921vn918tamsq1qt04b.png-170.3kB


三 獲取百度網頁代碼

1. 通常打開一個網址的步驟

  1. 打開瀏覽器
  2. 輸入網址
  3. 回車,訪問

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’)) 讀取並解密編碼
    image_1cv8c3982ftcsgv1mq31rks1ce855.png-31kB

四 搜索代碼

1.獲取網址

(1).打開網站—F12 或 檢測(右鍵單擊空白處)
image_1cv8cdulj1qj411ffrcr1pf0qmk5i.png-48.5kB

(2).選取圖片方式
箭頭選定,成爲藍色圖標—選擇圖片
image_1cv8cg3rbh675c61tjv1s7a2ma5v.png-8kB

(3).獲取圖片地址

  • 方法1:

找到 src 標籤—雙擊—複製—得到該圖片網址
image_1cv8cjh7jbrf4ct1342dp28q46c.png-92.7kB

  • 方法2:

src 標籤—右鍵單擊—open in new tab(在新的網頁中打開)—圖片新網頁地址—複製
image_1cv8co2cf1rucknr12ui1nbt1hkq6p.png-488.2kB

  • 方法1 會出現網址不全的情況,大多以方法2爲主

2. python代碼操作

(1)導入模塊 and 函數
import urllib
from urllib import request

(2)準備網址
url=‘https://search.51job.com/list/000000,000000,0000,00,9,99,%E6%95%B0%E6%8D%AE%E5%88%86%E6%9E%90,2,1.html?lang=c&stype=&postchannel=0000&workyear=99&cotype=99&degreefrom=99&jobterm=99&companysize=99&providesalary=99&lonlat=0%2C0&radius=-1&ord_field=0&confirmdate=9&fromType=&dibiaoid=0&address=&line=&specialarea=00&from=&welfare=

(3)打開網址
a=request.urlopen(url) # 調用request版塊的打開網址函數的urlopen(‘網址’)

(4)讀取內容(變量承接返回值 + 解碼)
b=a.read()
print(b)
print(b.decode(‘gbk’))


五 urllib下載文件

導入函數
from urllib import request

1. 下載

  • 語法: request.urlretrieve(資源地址,保存的文件名)

request.urlretrieve(‘http://pic.netbian.com/uploads/allimg/180302/230357-1520003037f447.jpg’,'1.jpg’)

image_1cv9q3p5qad31cm713b4ih71bd7m.png-30.5kB

image_1cv9q2e4hk4f1g8r1e1g1g1dmjf9.png-277.7kB

  • 路徑可能會不完整(以http開頭),會導致保存失敗

六 設置瀏覽器頭部與代理

import random
from urllib import request

1. 把 url 包裝爲請求 request(url)
url=‘http://www.baidu.com
req=request.Request(url)
image_1cv9q6ijs1nki2prckl1gsb5d413.png-16.8kB

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’)

image_1cva5vfgan4jk4g5qobfq8un9.png-120.1kB
image_1cva68ac6nvg6j2f40j5f925m.png-11kB

(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)

image_1cva7p5861ifjksfvrfclf1h2013.png-22.7kB

(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
| 在()內代表或

  • 任意字符表示一個郵箱 \[email protected]\w+.\w+
  • 身份證 表示方法: \d{17}(X|\d)

image_1cv828kfc12a7v151ogn1m3m1iqkm.png-39.8kB

  • 電話號碼錶示方法: (+86)?1[3456789]\d{9}

image_1cv820e9ln6a14ag1c2lak0ss39.png-58.8kB


re版塊具體信息 https://www.cnblogs.com/wenwei-blog/p/7216102.html