成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

Python爬蟲(chóng)新手教程:手機(jī)APP數(shù)據(jù)抓取pyspider

1. 手機(jī)APP數(shù)據(jù)----寫(xiě)在前面

繼續(xù)練習(xí)pyspider的使用,最近搜索了一些這個(gè)框架的一些使用技巧,發(fā)現(xiàn)文檔竟然挺難理解的,不過(guò)使用起來(lái)暫時(shí)沒(méi)有障礙,估摸著,要在寫(xiě)個(gè)5篇左右關(guān)于這個(gè)框架的教程。今天教程中增加了圖片的處理,你可以重點(diǎn)學(xué)習(xí)一下。

創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),鹽城企業(yè)網(wǎng)站建設(shè),鹽城品牌網(wǎng)站建設(shè),網(wǎng)站定制,鹽城網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷(xiāo),網(wǎng)絡(luò)優(yōu)化,鹽城網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。

2. 手機(jī)APP數(shù)據(jù)----頁(yè)面分析

咱要爬取的網(wǎng)站是 http://www.liqucn.com/rj/new/ 這個(gè)網(wǎng)站我看了一下,有大概20000頁(yè),每頁(yè)數(shù)據(jù)是9個(gè),數(shù)據(jù)量大概在180000左右,可以抓取下來(lái),后面做數(shù)據(jù)分析使用,也可以練習(xí)優(yōu)化數(shù)據(jù)庫(kù)。

Python爬蟲(chóng)新手教程:手機(jī)APP數(shù)據(jù)抓取 pyspider

網(wǎng)站基本沒(méi)有反爬措施,上去爬就可以,略微控制一下并發(fā),畢竟不要給別人服務(wù)器太大的壓力。

頁(yè)面經(jīng)過(guò)分析之后,可以看到它是基于URL進(jìn)行的分頁(yè),這就簡(jiǎn)單了,我們先通過(guò)首頁(yè)獲取總頁(yè)碼,然后批量生成所有頁(yè)碼即可

http://www.liqucn.com/rj/new/?page=1
http://www.liqucn.com/rj/new/?page=2
http://www.liqucn.com/rj/new/?page=3
http://www.liqucn.com/rj/new/?page=4

獲取總頁(yè)碼的代碼

class Handler(BaseHandler):
    crawl_config = {
    }

    @every(minutes=24 * 60)
    def on_start(self):
        self.crawl('http://www.liqucn.com/rj/new/?page=1', callback=self.index_page)

    @config(age=10 * 24 * 60 * 60)
    def index_page(self, response):
        # 獲取最后一頁(yè)的頁(yè)碼
        totle = int(response.doc(".current").text())
        for page in range(1,totle+1):
            self.crawl('http://www.liqucn.com/rj/new/?page={}'.format(page), callback=self.detail_page)
Python資源分享qun 784758214 ,內(nèi)有安裝包,PDF,學(xué)習(xí)視頻,這里是Python學(xué)習(xí)者的聚集地,零基礎(chǔ),進(jìn)階,都?xì)g迎

然后copy一段官方中文翻譯,過(guò)來(lái),時(shí)刻提醒自己

代碼簡(jiǎn)單分析:

def on_start(self) 方法是入口代碼。當(dāng)在web控制臺(tái)點(diǎn)擊run按鈕時(shí)會(huì)執(zhí)行此方法。

self.crawl(url, callback=self.index_page)這個(gè)方法是調(diào)用API生成一個(gè)新的爬取任務(wù),
            這個(gè)任務(wù)被添加到待抓取隊(duì)列。
def index_page(self, response) 這個(gè)方法獲取一個(gè)Response對(duì)象。 
            response.doc是pyquery對(duì)象的一個(gè)擴(kuò)展方法。pyquery是一個(gè)類(lèi)似于jQuery的對(duì)象選擇器。

def detail_page(self, response)返回一個(gè)結(jié)果集對(duì)象。
            這個(gè)結(jié)果默認(rèn)會(huì)被添加到resultdb數(shù)據(jù)庫(kù)(如果啟動(dòng)時(shí)沒(méi)有指定數(shù)據(jù)庫(kù)默認(rèn)調(diào)用sqlite數(shù)據(jù)庫(kù))。你也可以重寫(xiě)
            on_result(self,result)方法來(lái)指定保存位置。

更多知識(shí):
@every(minutes=24*60, seconds=0) 這個(gè)設(shè)置是告訴scheduler(調(diào)度器)on_start方法每天執(zhí)行一次。
@config(age=10 * 24 * 60 * 60) 這個(gè)設(shè)置告訴scheduler(調(diào)度器)這個(gè)request(請(qǐng)求)過(guò)期時(shí)間是10天,
    10天內(nèi)再遇到這個(gè)請(qǐng)求直接忽略。這個(gè)參數(shù)也可以在self.crawl(url, age=10*24*60*60) 和 crawl_config中設(shè)置。
@config(priority=2) 這個(gè)是優(yōu)先級(jí)設(shè)置。數(shù)字越大越先執(zhí)行。

分頁(yè)數(shù)據(jù)已經(jīng)添加到待爬取隊(duì)列中去了,下面開(kāi)始分析爬取到的數(shù)據(jù),這個(gè)在detail_page函數(shù)實(shí)現(xiàn)

    @config(priority=2)
    def detail_page(self, response):
        docs = response.doc(".tip_blist li").items()
        dicts = []
        for item in docs:
            title = item(".tip_list>span>a").text()
            pubdate = item(".tip_list>i:eq(0)").text()
            info = item(".tip_list>i:eq(1)").text()
            # 手機(jī)類(lèi)型
            category = info.split(":")[1]
            size = info.split("/")
            if len(size) == 2:
                size = size[1]
            else:
                size = "0MB"
            app_type = item("p").text()
            mobile_type = item("h4>a").text()
            # 保存數(shù)據(jù)

            # 建立圖片下載渠道

            img_url = item(".tip_list>a>img").attr("src")
            # 獲取文件名字
            filename = img_url[img_url.rindex("/")+1:]
            # 添加軟件logo圖片下載地址
            self.crawl(img_url,callback=self.save_img,save={"filename":filename},validate_cert=False)
            dicts.append({
                "title":title,
                "pubdate":pubdate,
                "category":category,
                "size":size,
                "app_type":app_type,
                "mobile_type":mobile_type

                })
        return dicts
Python資源分享qun 784758214 ,內(nèi)有安裝包,PDF,學(xué)習(xí)視頻,這里是Python學(xué)習(xí)者的聚集地,零基礎(chǔ),進(jìn)階,都?xì)g迎

數(shù)據(jù)已經(jīng)集中返回,我們重寫(xiě)on_result來(lái)保存數(shù)據(jù)到MongoDB中,在編寫(xiě)以前,先把鏈接mongodb的相關(guān)內(nèi)容編寫(xiě)完畢

import os

import pymongo
import pandas as pd
import numpy as np
import time
import json

DATABASE_IP = '127.0.0.1'
DATABASE_PORT = 27017
DATABASE_NAME = 'sun'
client = pymongo.MongoClient(DATABASE_IP,DATABASE_PORT)
db = client.sun
db.authenticate("dba", "dba")
collection = db.liqu  # 準(zhǔn)備插入數(shù)據(jù)

數(shù)據(jù)存儲(chǔ)

    def on_result(self,result):
        if result:
            self.save_to_mongo(result)            

    def save_to_mongo(self,result):
        df = pd.DataFrame(result)
        #print(df)
        content = json.loads(df.T.to_json()).values()
        if collection.insert_many(content):
            print('存儲(chǔ)到 mongondb 成功')

獲取到的數(shù)據(jù),如下表所示。到此為止,咱已經(jīng)完成大部分的工作了,最后把圖片下載完善一下,就收工啦!

Python爬蟲(chóng)新手教程:手機(jī)APP數(shù)據(jù)抓取 pyspider

Python爬蟲(chóng)新手教程:手機(jī)APP數(shù)據(jù)抓取 pyspider

3. 手機(jī)APP數(shù)據(jù)----圖片存儲(chǔ)

圖片下載,其實(shí)就是保存網(wǎng)絡(luò)圖片到一個(gè)地址即可

    def save_img(self,response):
        content = response.content
        file_name = response.save["filename"]
        #創(chuàng)建文件夾(如果不存在)
        if not os.path.exists(DIR_PATH):                         
            os.makedirs(DIR_PATH) 

        file_path = DIR_PATH + "/" + file_name

        with open(file_path,"wb" ) as f:
            f.write(content)
Python資源分享qun 784758214 ,內(nèi)有安裝包,PDF,學(xué)習(xí)視頻,這里是Python學(xué)習(xí)者的聚集地,零基礎(chǔ),進(jìn)階,都?xì)g迎

到此為止,任務(wù)完成,保存之后,調(diào)整爬蟲(chóng)的抓取速度,點(diǎn)擊run,數(shù)據(jù)跑起來(lái)~~~~

Python爬蟲(chóng)新手教程:手機(jī)APP數(shù)據(jù)抓取 pyspider

分享名稱:Python爬蟲(chóng)新手教程:手機(jī)APP數(shù)據(jù)抓取pyspider
網(wǎng)站地址:http://jinyejixie.com/article36/jjicsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、微信小程序、ChatGPT、品牌網(wǎng)站設(shè)計(jì)移動(dòng)網(wǎng)站建設(shè)、網(wǎng)站收錄

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都定制網(wǎng)站建設(shè)
浮梁县| 玛纳斯县| 龙门县| 德清县| 进贤县| 奉化市| 馆陶县| 略阳县| 翁牛特旗| 金湖县| 孟村| 博湖县| 云霄县| 改则县| 宁波市| 德格县| 永嘉县| 曲靖市| 涡阳县| 株洲县| 都匀市| 西城区| 高平市| 启东市| 勃利县| 福安市| 内黄县| 巨野县| 得荣县| 佛山市| 九江县| 肥城市| 莱芜市| 顺昌县| 门源| 浦江县| 开原市| 长子县| 河津市| 股票| 沈丘县|