免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Skr-Eric的爬蟲課堂(二)——爬蟲的解析模塊和數(shù)據(jù)持久化存儲

解析模塊

  1、數(shù)據(jù)的分類

    1、結(jié)構(gòu)化數(shù)據(jù)

      特點:有固定的格式,如:HTML、XML

    2、非結(jié)構(gòu)化數(shù)據(jù)

      示例:圖片、音頻、視頻,這類數(shù)據(jù)以二進(jìn)制方式存儲

  2、正則表達(dá)式 re

    1、使用流程

      1、創(chuàng)建編譯對象 :p = re.compile('正則表達(dá)式')

      2、對字符串進(jìn)行匹配 :r = p.match('字符串')

      3、獲取匹配結(jié)果     :r.group()

    2、常用方法

      1、match(html) : 字符串開頭的第1個,返回對象

      2、search(html): 從開始往后找,匹配第1個,返回對象

      3、findall(html) : 所有全部匹配,返回列表

    3、表達(dá)式

      .  : 匹配任意字符(不包括\n)

      \d : 數(shù)字

      \s : 空白字符

      \S : 非空白字符

      \w : 字母、數(shù)字、_

      [...] : 包含[]內(nèi)容 :A[BCD]E --> ABE ACE ADE

      *  : 0次或多次

      ?  : 0次或1次

      +  : 1次或多次

      {m}: m次

      {m,n} : m-n次,  AB{1,3}C ->ABC ABBC ABBBC

    4、貪婪匹配和非貪婪匹配

      貪婪匹配(.*) : 在整個表達(dá)式匹配成功的前提下,盡可能多的匹配*

      非貪婪匹配(.*?) :在整個表達(dá)式匹配成功的前提下,盡可能少的匹配*

import rehtml = """<div><p>仰天大笑出門去</p></div><div><p>成也風(fēng)云,敗也風(fēng)云</p></div>"""# 貪婪匹配,re.S使 . 能匹配\n在內(nèi)的所有字符p = re.compile('<div><p>.*</p></div>',re.S)r = p.findall(html)print(r)# 非貪婪匹配p = re.compile('<div><p>.*?</p></div>',re.S)r = p.findall(html)print(r)

    5、findall()的分組

import res = "A B C D"p1 = re.compile('\w+\s+\w+')r1 = p1.findall(s)print(r1)# 第1步:['A B','C D']# 第2步:['A','C']p2 = re.compile('(\w+)\s+\w+')r2 = p2.findall(s)print(r2)# 第1步:['A B','C D']# 第2步:[('A','B'),('C','D')]p3 = re.compile('(\w+)\s+(\w+)')r3 = p3.findall(s)print(r3)

  3、內(nèi)涵段子腦筋急轉(zhuǎn)彎抓取

import urllib.requestimport reclass NeihanSpider:    def __init__(self):        self.headers = {"User-Agent":"Mozilla/5.0"}        self.baseurl = "https://www.neihan8.com/njjzw/"        self.page = 1        # 獲取頁面    def getPage(self,url):        req = urllib.request.Request(url,headers=self.headers)        res = urllib.request.urlopen(req)         html = res.read().decode("utf-8")        self.parsePage(html)        # 解析頁面    def parsePage(self,html):        p = re.compile('<div class="text-column-item.*?title="(.*?)">.*?class="desc">(.*?)</div>',re.S)        r_list = p.findall(html)#        print(r_list)        # r_list: [("二虎","公母"),(),()]        self.writePage(r_list)    # 保存數(shù)據(jù)    def writePage(self,r_list):        for r_tuple in r_list:            for r_str in r_tuple:                with open("急轉(zhuǎn)彎.txt","a",encoding="gb18030") as f:                    f.write(r_str.strip() + "\n")            # 每個急轉(zhuǎn)彎之間有兩個空行            with open("急轉(zhuǎn)彎.txt","a") as f:                f.write("\n\n")                # 主函數(shù)    def workOn(self):        self.getPage(self.baseurl)        while True:            c = input("成功,是否繼續(xù)(y/n):")            if c.strip().lower() == "y":                self.page += 1                url = self.baseurl + "index_"                       + str(self.page) + ".html"                self.getPage(url)            else:                print("爬取結(jié)束,謝謝使用本爬蟲")                break        if __name__ == "__main__":    spider = NeihanSpider()    spider.workOn()

    網(wǎng)址 :http://www.neihan8.com

1、步驟

      1、找URL規(guī)律

        第1頁:https://www.neihan8.com/njjzw/

第2頁:https://www.neihan8.com/njjzw/index_2.html

      2、用正則匹配出題目和答案

      3、寫代碼

        1、發(fā)請求

2、用正則解析

  <div class="text-column-item.*?title="(.*?)">.*?class="desc">(.*?)</div>

3、保存

  4、貓眼電影top100榜單,存到csv文件里

import urllib.requestimport reimport csvclass MaoyanSpider:    def __init__(self):        self.headers = {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 OPR/26.0.1656.60"}        self.baseurl = "http://maoyan.com/board/4?offset="        self.offset = 0        self.page = 1            # 獲取頁面    def getPage(self,url):        req = urllib.request.Request(url,headers=self.headers)        res = urllib.request.urlopen(req)        html = res.read().decode("utf-8")        self.parsePage(html)        # 解析頁面    def parsePage(self,html):        p = re.compile('<div class="movie-item-info">.*?title="(.*?)".*?class="star">(.*?)</p>.*?class="releasetime">(.*?)</p>',re.S)        r_list = p.findall(html)        # r_list:[("霸王別姬","張國榮","1993"),(),()]        self.writeTocsv(r_list)            # 保存數(shù)據(jù)    def writeTocsv(self,r_list):        for r_tuple in r_list:#            L = list(r_tuple)            L = [r_tuple[0].strip(),r_tuple[1].strip(),r_tuple[2].strip()]            with open("貓眼電影.csv","a",newline="") as f:                writer = csv.writer(f)                writer.writerow(L)            # 主函數(shù)    def workOn(self):        while True:            c = input("爬按y,退出按q:")            if c.strip().lower() == "y":                  url = self.baseurl + str(self.offset)                self.getPage(url)                self.page += 1                self.offset = (self.page - 1)*10             else:                print("爬取結(jié)束")                break                if __name__ == "__main__":    spider = MaoyanSpider()    spider.workOn()

    網(wǎng)址 :貓眼電影 - 榜單 - top100榜

    目標(biāo) :抓取電影名、主演、上映時間

    1、知識點

      1、csv模塊的使用流程

        1、打開csv文件

         with open("測試.csv","a",newline="") as f:

         2、初始化寫入對象

          writer = csv.writer(f)

          3、寫入數(shù)據(jù)(列表)

          writer.writerow([列表])

    2、準(zhǔn)備工作

      1、找URL規(guī)律

        第1頁:http://maoyan.com/board/4?offset=0

第2頁:http://maoyan.com/board/4?offset=10

第n頁:offset=(n-1)*10

      2、寫正則表達(dá)式

        <div class="movie-item-info">.*?title="(.*?)".*?class="star">(.*?)</p>.*?class="releasetime">(.*?)</p>

      3、寫代碼

數(shù)據(jù)持久化存儲

1、存入mongodb數(shù)據(jù)庫(pymongo模塊回顧)

    # 創(chuàng)建連接對象

    conn = pymongo.MongoClient("localhost",27017)

    # 創(chuàng)建數(shù)據(jù)庫對象

    db = conn.庫名

    # 創(chuàng)建集合對象

    myset = db.集合名

    # 插入數(shù)據(jù)

    myset.insert(字典)

    >>>show dbs

    >>>use 庫名

    >>>show collections

    >>>db.集合名.find().pretty()

    >>>db.dropDatabase()

    >>>db.集合名.count()

2、存入MySQL數(shù)據(jù)庫(pymysql模塊回顧)

3、requests模塊

  1、安裝

    Anaconda Prompt : conda install requests

    Windows cmd     : python -m pip install requests

      ## python -m 是以管理員身份執(zhí)行pip安裝命令

    Ubuntu          : sudo pip3 install requests

  2、常用方法

    1、requests.get(url,headers=headers)

      發(fā)起請求,并獲取響應(yīng)對象

    2、響應(yīng)對象res的屬性

      1、res.text    : 字符串

      2、res.content : 字節(jié)流

      3、res.encoding: 指定字符編碼 (ISO-8859-1)

             ## res.encoding = "utf-8"

      4、res.status_code : 響應(yīng)碼

      5、res.url         : 實際數(shù)據(jù)的URL

    3、get()使用場景

      1、沒有查詢參數(shù)

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

      2、有查詢參數(shù)(params)

        res = requests.get(url,params=params,headers=headers)

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
爬蟲新寵requests_html 帶你甄別2019虛假大學(xué)
Python爬蟲進(jìn)階:爬取梨視頻網(wǎng)站Top排行榜視頻數(shù)據(jù)
?Python爬蟲:使用協(xié)程下載m3u8視頻
python爬蟲代碼示例分享
白話網(wǎng)絡(luò)爬蟲——全網(wǎng)最通俗解釋
爬蟲案例1(后續(xù))
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服