国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python---爬蟲學(xué)習(xí)(詳細(xì)注釋/優(yōu)化)

這篇具有很好參考價(jià)值的文章主要介紹了Python---爬蟲學(xué)習(xí)(詳細(xì)注釋/優(yōu)化)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

from bs4 import BeautifulSoup
import re  # 正則表表達(dá)式文字匹配
import urllib.request, urllib.error  # 指定url,獲取網(wǎng)頁數(shù)據(jù)
import xlwt
findlink = re.compile(r'a href="(.*?)">')  # 電影鏈接
findImageSrc = re.compile(r'<img.*src="(.*?)"', re.S)  # re.S讓換行符包含著其中  #圖片鏈接
findTitle = re.compile(r'<span class="title">(.*)</span>')  # 標(biāo)題
findRating = re.compile(r'<span class="rating_num" property="v:average">(.*)</span>')  # 評分
findJudge = re.compile(r'<span>(\d*)人評價(jià)</span>')  # 人數(shù)
findInq = re.compile(r'<span class="inq">(.*)</span>')  # 概況
findBd = re.compile(r'<p class="">(.*?)</p>', re.S)  # 相關(guān)信息

def main():
    # 定義基礎(chǔ)URL,用于構(gòu)造完整的URL來請求數(shù)據(jù)
    baseurl = "https://movie.douban.com/top250?start="
    # 調(diào)用getdata函數(shù),傳入基礎(chǔ)URL,獲取數(shù)據(jù)并返回
    datalist = getdata(baseurl)
    # 打印獲取到的數(shù)據(jù)列表
    print(datalist)
    # 定義保存路徑,將數(shù)據(jù)保存到movies.xls文件中
    savepath = ".\\movies.xls"  # 保存路徑
    # 調(diào)用saveData函數(shù),傳入獲取到的數(shù)據(jù)列表和保存路徑,保存數(shù)據(jù)
    saveData(datalist, savepath)

# 定義函數(shù),用于發(fā)送HTTP請求并獲取返回的HTML內(nèi)容
def askURL(url):
    # 定義字典,作為HTTP請求的頭部信息
    head = {
        "User-Agent": " Mozilla / 5.0(Linux;Android6.0;Nexus5 Build / MRA58N) AppleWebKit / 537.36(KHTML, likeGecko) Chrome / 99.0.4844.51Mobile Safari / 537.36"
    }
    # 根據(jù)給定的URL和頭部信息,構(gòu)造一個(gè)HTTP請求對象
    request = urllib.request.Request(url, headers=head)
    # 初始化一個(gè)空字符串,用于存儲(chǔ)HTML內(nèi)容
    html = ""
    try:
        # 使用urllib.request的urlopen函數(shù),發(fā)送HTTP請求并獲取響應(yīng)對象
        response = urllib.request.urlopen(request)
        # 從響應(yīng)對象中讀取HTML內(nèi)容,并解碼為utf-8格式的字符串
        html = response.read().decode('utf-8')
        # 注釋:打印HTML內(nèi)容(實(shí)際代碼被注釋掉)
        # print(html)
    except urllib.error.URLError as e:
        # 如果發(fā)生URL相關(guān)的錯(cuò)誤,處理異常
        if hasattr(e, "code"):
            # 打印異常中的錯(cuò)誤代碼
            print(e.code)
        if hasattr(e, "reason"):
            # 打印異常中的錯(cuò)誤原因描述
            print(e.reason)
    return html  # 返回獲取到的HTML內(nèi)容

# 爬取網(wǎng)頁
def getdata(baseurl):
    # 初始化一個(gè)空的數(shù)據(jù)列表,用于存放解析出的數(shù)據(jù)
    datalist = []

    # 從基礎(chǔ)URL開始,循環(huán)請求10次,每次請求偏移25
    for i in range(0, 10):
        url = baseurl + str(i * 25)  # 構(gòu)造完整的URL
        html = askURL(url)  # 發(fā)送HTTP請求并獲取HTML內(nèi)容
        soup = BeautifulSoup(html, "html.parser")  # 使用BeautifulSoup解析HTML內(nèi)容
        # 遍歷解析出的每一個(gè)'div'標(biāo)簽,類名為"item"
        for item in soup.find_all('div', class_="item"):
            # 初始化一個(gè)空的數(shù)據(jù)列表,用于存放當(dāng)前item的數(shù)據(jù)
            data = []
            item = str(item)  # 將item轉(zhuǎn)換為字符串,以便進(jìn)行正則表達(dá)式匹配
            # 尋找鏈接
            link = re.findall(findlink, item)[0]  # 使用正則表達(dá)式匹配鏈接
            data.append(link)  # 將鏈接添加到數(shù)據(jù)列表中
            # 尋找圖片源地址
            image = re.findall(findImageSrc, item)[0]  # 使用正則表達(dá)式匹配圖片源地址
            data.append(image)  # 將圖片源地址添加到數(shù)據(jù)列表中
            # 尋找標(biāo)題
            title = re.findall(findTitle, item)  # 使用正則表達(dá)式匹配標(biāo)題
            if (len(title) == 2):  # 如果匹配到兩個(gè)標(biāo)題
                ctitle = title[0]  # 第一個(gè)標(biāo)題
                data.append(ctitle)  # 將第一個(gè)標(biāo)題添加到數(shù)據(jù)列表中
                otitle = title[1].replace("/", "")  # 第二個(gè)標(biāo)題,移除其中的"/"字符
                data.append(otitle.strip())  # 將第二個(gè)標(biāo)題添加到數(shù)據(jù)列表中,并移除首尾的空格
            else:  # 如果只匹配到一個(gè)標(biāo)題
                data.append(title[0])  # 將標(biāo)題添加到數(shù)據(jù)列表中
                data.append(" ")  # 添加一個(gè)空格,作為第二個(gè)標(biāo)題的占位符
            # 尋找評分
            rating = re.findall(findRating, item)[0]  # 使用正則表達(dá)式匹配評分
            data.append(rating)  # 將評分添加到數(shù)據(jù)列表中
            # 尋找評價(jià)人數(shù)
            judgeNum = re.findall(findJudge, item)[0]  # 使用正則表達(dá)式匹配評價(jià)人數(shù)
            data.append(judgeNum)  # 將評價(jià)人數(shù)添加到數(shù)據(jù)列表中
            # 尋找描述或簡介
            inq = re.findall(findInq, item)  # 使用正則表達(dá)式匹配描述或簡介
            if len(inq) != 0:  # 如果匹配到了描述或簡介
                inq = inq[0].replace("。", "")  # 移除其中的"。"字符
                data.append(inq)  # 將描述或簡介添加到數(shù)據(jù)列表中
            else:  # 如果沒匹配到描述或簡介
                data.append("")  # 在數(shù)據(jù)列表中添加一個(gè)空字符串作為占位符
            bd = re.findall(findBd, item)[0]  # 使用正則表達(dá)式匹配導(dǎo)演或主演信息,這里可能存在錯(cuò)誤,導(dǎo)演和主演信息不在一起匹配,此處可能需要分別處理導(dǎo)演和主演的信息。
            # 并且匹配結(jié)果也沒有處理雙引號(hào)的問題。導(dǎo)演和主演的信息可能需要分開處理。
            bd = re.sub('<br(\s+)?/>(\s+)?', " ", bd)  # 替換HTML中的換行標(biāo)簽為空格字符,這里可能需要考慮HTML轉(zhuǎn)義字符的問題。
            # 并且這里只替換了一次,可能存在重復(fù)替換的問題。導(dǎo)演和主演的信息可能需要分別處理。
            bd = re.sub('/', " ", bd)  # 將"/"替換為空格字符,這里可能存在錯(cuò)誤,因?yàn)?/ "在正則表達(dá)式中被錯(cuò)誤地轉(zhuǎn)義了
# 3 保存數(shù)據(jù)
# 定義saveData的函數(shù),接收兩個(gè)參數(shù):datalist和savepath
def saveData(datalist, savepath):
    # 打印"save...",表示開始保存數(shù)據(jù)
    print("save...")
    # 創(chuàng)建一個(gè)Excel工作簿,設(shè)置編碼為utf-8,樣式壓縮為0
    book = xlwt.Workbook(encoding="utf-8", style_compression=0)
    # 在工作簿中添加一個(gè)名為'movies'的工作表,設(shè)置cell_overwrite_ok為True,表示允許覆蓋單元格內(nèi)容
    sheet = book.add_sheet('movies', cell_overwrite_ok=True)
    # 定義一個(gè)包含列名的列表
    col = ("Movies_link", "Image_link", "Chinese_name", "Foreign_name", "Rating", "Reviews", "概況", "Summary")
    # 循環(huán)遍歷col中的每一個(gè)元素,從0到7,將元素寫入到工作表的第0行對應(yīng)列中
    for i in range(0, 8):
        sheet.write(0, i, col[i])
        # 循環(huán)遍歷datalist中的每一個(gè)元素,從0到249
    for i in range(0, 250):
        # 打印當(dāng)前處理的條目序號(hào)
        print("第%d條" % (i + 1))

        # 從datalist中獲取第i個(gè)元素,賦值給data
        data = datalist[i]

        # 循環(huán)遍歷data中的每一個(gè)元素,從0到7,將元素寫入到工作表的第i+1行對應(yīng)列中
        for j in range(0, 8):
            sheet.write(i + 1, j, data[j])

            # 將工作簿保存到指定的路徑下,文件名為savepath
    book.save(savepath)
    
main()
print("爬取完畢!")

項(xiàng)目結(jié)構(gòu):

  1. 導(dǎo)入庫
  2. 正則表達(dá)式:用于匹配網(wǎng)頁中電影信息中的鏈接、圖片標(biāo)題等
  3. 主程序:調(diào)用get_data和save_data
  4. HTTP請求函數(shù):ask_URL
  5. 獲取電影數(shù)據(jù)函數(shù):get_data à 把信息保存data_list中
  6. 保存數(shù)據(jù)函數(shù):save_data

文章來源地址http://www.zghlxwxcb.cn/news/detail-819050.html

到了這里,關(guān)于Python---爬蟲學(xué)習(xí)(詳細(xì)注釋/優(yōu)化)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Pycharm工具Python開發(fā)自動(dòng)添加注釋(詳細(xì))

    Pycharm工具Python開發(fā)自動(dòng)添加注釋(詳細(xì))

    定義了一個(gè)函數(shù),在函數(shù)下面敲入了三個(gè)雙引號(hào)后,enter回車并沒有自動(dòng)出現(xiàn)注釋,如圖: 解決辦法 Pycharm中依次打開File — Settings — Tools — Python Integrated Tools,如圖: 成功

    2024年02月15日
    瀏覽(26)
  • python爬蟲優(yōu)化手段

    當(dāng)使用Python進(jìn)行網(wǎng)絡(luò)資源爬取時(shí),會(huì)涉及到網(wǎng)絡(luò)請求、數(shù)據(jù)處理和存儲(chǔ)等操作,這些操作可能會(huì)對電腦性能產(chǎn)生一定的影響。以下是一些關(guān)于Python爬取網(wǎng)絡(luò)資源的常見注意事項(xiàng): 網(wǎng)絡(luò)請求頻率:頻繁的網(wǎng)絡(luò)請求可能會(huì)對電腦性能產(chǎn)生較大的影響,尤其是在大規(guī)模爬取時(shí)。可以

    2024年02月15日
    瀏覽(12)
  • 優(yōu)化Python代理爬蟲的應(yīng)用

    優(yōu)化Python代理爬蟲的應(yīng)用

    當(dāng)我們在資源受限的環(huán)境中使用Python代理爬蟲時(shí),我們需要采取一些優(yōu)化措施,以確保程序的高效性和穩(wěn)定性。在本文中,我將分享一些關(guān)于如何優(yōu)化Python代理爬蟲在資源受限環(huán)境下的應(yīng)用的實(shí)用技巧。 首先我們來了解,哪些情況算是資源受限: 1. 帶寬限制:網(wǎng)絡(luò)帶寬有限

    2024年02月11日
    瀏覽(20)
  • Python學(xué)習(xí)筆記--變量與注釋

    近期閱讀朱雷(@piglei)所著《Python工匠》一書,頗有收獲,特對書中每章節(jié)的總結(jié)部分內(nèi)容進(jìn)行摘錄,供自己未來進(jìn)一步學(xué)習(xí)。 在一段代碼里,變量和注釋是最接近自然語言的東西。因此,好的變量名,簡明扼要的注釋可以顯著提升代碼的質(zhì)量。在給變量起名時(shí),盡量使用

    2024年01月25日
    瀏覽(20)
  • 使用 OpenCV Python 實(shí)現(xiàn)自動(dòng)圖像注釋工具的詳細(xì)步驟--附完整源碼

    注釋是深度學(xué)習(xí)項(xiàng)目中最關(guān)鍵的部分。它是模型學(xué)習(xí)效果的決定因素。然而,這是非常乏味且耗時(shí)的。一種解決方案是使用自動(dòng)圖像注釋工具,這大大縮短了時(shí)間。 本文是pyOpenAnnotate系列的一部分,其中包括以下內(nèi)容。 1、使用 OpenCV 進(jìn)行圖像注釋的路線圖。 2、pyOpenAnnotate工

    2024年02月11日
    瀏覽(17)
  • Python爬蟲常見代理池實(shí)現(xiàn)和優(yōu)化

    在這篇文章中,我們將探討Python爬蟲中常見的代理池實(shí)現(xiàn)和優(yōu)化方法。在爬取網(wǎng)站數(shù)據(jù)時(shí),為防止被目標(biāo)網(wǎng)站封禁IP,我們通常會(huì)使用代理IP進(jìn)行訪問。一個(gè)高效且穩(wěn)定的代理池可以幫助我們輕松應(yīng)對各種反爬策略。 首先,我們來了解一下代理池的基本概念: -代理池:代理池

    2024年02月10日
    瀏覽(17)
  • Python pygame 實(shí)現(xiàn)游戲 彩色 五子棋 詳細(xì)注釋 附源碼 單機(jī)版

    Python pygame 實(shí)現(xiàn)游戲 彩色 五子棋 詳細(xì)注釋 附源碼 單機(jī)版

    之前學(xué)python的時(shí)候 寫了個(gè)游戲來練手 用的是 pygame 沒有別的依賴 只用了一兩百行的代碼就實(shí)現(xiàn)了 整體來說功能并不算完整 這個(gè)項(xiàng)目是在大學(xué)的時(shí)候 偶然一個(gè)機(jī)遇交一個(gè)小朋友Python時(shí) 小朋友大概10多歲 正在打算上初一 小朋友分非常非常非常聰明?。?! 當(dāng)時(shí)給他講東西 他很

    2024年02月12日
    瀏覽(20)
  • 利用Python+selenium技術(shù),實(shí)現(xiàn)瀏覽器基本操作詳解,代碼有詳細(xì)注釋

    利用Python+selenium技術(shù),實(shí)現(xiàn)瀏覽器基本操作詳解,代碼有詳細(xì)注釋

    首先,需要安裝selenium庫和對應(yīng)的瀏覽器驅(qū)動(dòng)程序。以Chrome瀏覽器為例,可以使用以下命令安裝selenium和chromedriver: 然后,需要下載對應(yīng)版本的chromedriver,并將其添加到環(huán)境變量中。下載地址:http://chromedriver.storage.googleapis.com/index.html 不懂安裝的,可以參考Chormedriver下載和安

    2024年02月09日
    瀏覽(27)
  • 基于Python的數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)——循環(huán)順序隊(duì)列與遞歸(附詳細(xì)代碼和注釋)

    1、創(chuàng)建名為 prac04_01.py 的文件,在其中編寫一個(gè)循環(huán)順序隊(duì)列的類,該類必須包含 循環(huán)順序隊(duì)列的定義及基本操作,并通過以下步驟測試各種基本操作的實(shí)現(xiàn)是否正確。 (1)初始化一個(gè)循環(huán)順序隊(duì)列 CircularSequenceQueue。 (2)判斷隊(duì)列是否為空。 (3)遍歷隊(duì)列內(nèi)的所有元素。 (4)將元

    2024年02月05日
    瀏覽(22)
  • python爬蟲入門教程(非常詳細(xì)):如何快速入門Python爬蟲?

    示例示例Python爬蟲入門教程什么是爬蟲爬蟲(又稱網(wǎng)絡(luò)爬蟲)是一種按照一定的規(guī)則,自動(dòng)地抓取萬維網(wǎng)信息的程序或者腳本。它可以自動(dòng)地抓取網(wǎng)頁內(nèi)容,并從中提取有用的數(shù)據(jù),存儲(chǔ)到本地文件或數(shù)據(jù)庫中。 Python爬蟲入門教程 1. 什么是爬蟲爬蟲(又稱網(wǎng)絡(luò)爬蟲)是一種

    2024年02月10日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包