欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)邀請(qǐng)碼778899分享:02、爬蟲數(shù)據(jù)解析-Re解析

柚子快報(bào)邀請(qǐng)碼778899分享:02、爬蟲數(shù)據(jù)解析-Re解析

http://yzkb.51969.com/

數(shù)據(jù)解析的目的是不拿到頁面的全部?jī)?nèi)容,只拿到部分我們想要的內(nèi)容內(nèi)容。

Re解析就是正則解析,效率高準(zhǔn)確性高。學(xué)習(xí)本節(jié)內(nèi)容前需要學(xué)會(huì)基礎(chǔ)的正則表達(dá)式。

一、正則匹配規(guī)則

1、常用元字符

.? ? ? ?匹配除換行符以外的字符

\w? ? 匹配字母或數(shù)字或下劃線

\s? ? ?匹配任意的空白符

\d? ? ?匹配數(shù)字

\n? ? ?匹配一個(gè)換行符

\t? ? ? 匹配一個(gè)制表符

^? ? ? 匹配字符串的開始

$? ? ? 匹配字符串的結(jié)尾

?\W? ?匹配非字母或數(shù)字或下劃線

\D? ? ?匹配非數(shù)字

\S? ? ?匹配非空白符

a|b? ? 匹配字符a或字符b

()? ? ? ?匹配括號(hào)內(nèi)的表達(dá)式,也表示一個(gè)組

[...]? ? 匹配字符組中的字符

[^...]? ?匹配除了字符組中字符的所有字符

2、量詞:控制前面的元字符出現(xiàn)的次數(shù)

*? ? ? ? 重復(fù)0次或更多次

+? ? ? ?重復(fù)一次或更多次

?? ? ? 重復(fù)0次或一次

{n}? ? ?重復(fù)n次

{n,}? ? 重復(fù)n次或更多次

{n,m} 重復(fù)n到m次

3、貪婪匹配和非貪婪匹配(重要)

.*? ? ?貪婪匹配

.*?? ?惰性匹配

二、Re模塊

re模塊中只需要記住以下幾種功能就夠用了

1、re.findall

匹配字符串中所有的符合正則的內(nèi)容,返回list

import re

list = re.findall(r"\d+","我的電話號(hào)是:10086,小紅的電話是100000")

print(list)

#運(yùn)行結(jié)果:['10086', '100000']

2、re.finditer(重點(diǎn))

和findall差不多,只不過這時(shí)返回的是迭代器

因?yàn)閒indall返回列表,當(dāng)頁面上數(shù)據(jù)較大時(shí),list就會(huì)非常大,效率不高。

從迭代器中拿到內(nèi)容需要.group()

import re

it = re.finditer(r"\d+","我的電話號(hào)是:10086,小紅的電話是100000")

print(it)

#返回結(jié)果:

for i in it:

print(i.group())

#返回結(jié)果

# 10086

# 100000

3、re.search

進(jìn)行匹配,但是如果匹配到了第一個(gè)結(jié)果,就會(huì)返回這個(gè)結(jié)果。如果匹配不上search返回的是None。

如果拿到了返回的依然是迭代器,使用.group()取到匹配的內(nèi)容

import re

s = re.search(r"\d+","我的電話號(hào)是:10086,小紅的電話是100000")

print(s.group())

#返回結(jié)果 10086

4、re.match

只能從字符串的開頭進(jìn)行匹配。相當(dāng)于在正則表達(dá)式前面加了一個(gè)^

import re

s1 = re.match(r"\d+","我的電話號(hào)是:10086,小紅的電話是100000")

print(s1.group()) #報(bào)錯(cuò),未找到

s2 = re.match(r"\d+","10086,小紅的電話是100000")

print(s2.group()) #返回10086

5、預(yù)加載正則表達(dá)式(re.compile(r"\d+"))

當(dāng)后面正則較為復(fù)雜的時(shí)候,就可以使用預(yù)加載,先寫規(guī)則。

import re

obj = re.compile(r"\d+")

ret = obj.finditer("我的電話號(hào)是:10086,小紅的電話是100000")

for it in ret:

print(it.group())

6、單獨(dú)提取正則中的內(nèi)容

re.S的作用是讓.能匹配換行符

obj = re.compile(r"

(?P.*?)
", re.S)#re.S的作用是讓.能匹配換行符

ret = obj.finditer(s)

for it in ret:

print(it.group("hello"))

# 小米

# 華為

# 三星

# 蘋果

三、實(shí)戰(zhàn):豆瓣top250

1、需求:

拿到排行榜的電影名稱,年份,評(píng)價(jià),打分,并使用csvwriter寫入到csv文件中

2、思路:

(1)拿到頁面源代碼 requests

(2)通過re來提取到想要的有效信息 re

import re

import requests

import csv

url = "http://movie.douban.com/top250"

headers ={

"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0"

}

resp = requests.get(url,headers=headers)

page_content = resp.text

#解析數(shù)據(jù)

obj = re.compile(r'

  • .*?
    (?P.*?).*?'

    r'

    .*?
    (?P

    r'(?P.*?).*?'

    r'(?P.*?)人評(píng)價(jià)', re.S)

    ret = obj.finditer(page_content)

    f = open("data.csv",mode="w",encoding="utf-8")

    csvwriter = csv.writer(f)

    for it in ret:

    # print(it.group("name"))

    # print(it.group("time").strip())

    # print(it.group("score"))

    # print(it.group("judge"))

    dic = it.groupdict()

    dic['time'] = dic['time'].strip()#因?yàn)槟攴莺竺嬗锌崭瘢瑔为?dú)處理

    csvwriter.writerow(dic.values())

    resp.close()

    ?結(jié)果:

    四、實(shí)戰(zhàn):屠戮盜版天堂電影信息

    1、需求:

    想拿到2024必看篇的所有電影下載地址。

    2、思路

    (1)定位到2024必看篇

    (2)從2024必看篇中提取到子頁面的鏈接地址

    (3)請(qǐng)求子頁面的鏈接地址,拿到我們想要的下載地址

    注:此站點(diǎn)進(jìn)行了反爬措施,需要添加User-Agent和Cookie。并且編碼為gb2312,需要設(shè)置。

    import requests

    import re

    url = "https://www.dytt89.com/"

    headers = {

    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0",

    "Cookie":"guardok=VxXtQIYG+FVwAJLu76U/QvRiEyoXdFVFLcCsBijzPzwTF6G1uhyRle6K2pHzz4oYx32wQY0n0W/gv80enczOuA==; __vtins__KSHU1VNqce379XHB=%7B%22sid%22%3A%20%222408df8b-f3ee-5771-b99c-a0b206621ca0%22%2C%20%22vd%22%3A%201%2C%20%22stt%22%3A%200%2C%20%22dr%22%3A%200%2C%20%22expires%22%3A%201722072217375%2C%20%22ct%22%3A%201722070417375%7D; __51uvsct__KSHU1VNqce379XHB=1; __51vcke__KSHU1VNqce379XHB=8133f70d-0abb-5af7-91dc-fbf00581cf6a; __51vuft__KSHU1VNqce379XHB=1722070417377; Hm_lvt_93b4a7c2e07353c3853ac17a86d4c8a4=1722070418; Hm_lpvt_93b4a7c2e07353c3853ac17a86d4c8a4=1722070418; HMACCOUNT=4AF1B6073CA4B2F3; Hm_lvt_8e745928b4c636da693d2c43470f5413=1722070418; Hm_lpvt_8e745928b4c636da693d2c43470f5413=1722070418; Hm_lvt_0113b461c3b631f7a568630be1134d3d=1722070418; Hm_lpvt_0113b461c3b631f7a568630be1134d3d=1722070418"

    }

    resp = requests.get(url, verify=False,headers=headers)#verify=False去掉安全驗(yàn)證

    resp.encoding = "gb2312"

    # print(resp.text)

    #定位到2024必看

    obj1 = re.compile(r'2024必看熱片.*?

      (.*?)
    ', re.S)

    obj2 = re.compile(r"a href='(?P.*?)'",re.S)

    obj3 = re.compile(r'譯  名(?P.*?)
    .*?WORD-WRAP: break-word" bgcolor="#fdfddf">', re.S)

    result1 = obj1.finditer(resp.text)

    for it in result1:

    ul = it.group()

    #提取子頁面鏈接

    result2 = obj2.finditer(ul)

    for it2 in result2:

    )

    #請(qǐng)求子頁面鏈接

    resp2 = requests.get(href, headers=headers,verify=False)

    resp2.encoding = "gb2312"

    #拿到子頁面鏈接的下載地址

    result3 = obj3.finditer(resp2.text)

    for it3 in result3:

    print(it3.group("movie"))

    print(it3.group("download"))

    resp2.close()

    resp.close()

    柚子快報(bào)邀請(qǐng)碼778899分享:02、爬蟲數(shù)據(jù)解析-Re解析

    http://yzkb.51969.com/

    推薦文章

    評(píng)論可見,查看隱藏內(nèi)容

    本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。

    轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。

    本文鏈接:http://gantiao.com.cn/post/19547081.html

    發(fā)布評(píng)論

  • 您暫未設(shè)置收款碼

    請(qǐng)?jiān)谥黝}配置——文章設(shè)置里上傳

    掃描二維碼手機(jī)訪問

    文章目錄