国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

Java爬蟲(chóng)快速開(kāi)發(fā)工具:uncs

AWang / 2902人閱讀

摘要:零寫(xiě)在前面是快速開(kāi)發(fā)爬蟲(chóng)的工具,簡(jiǎn)單便捷,經(jīng)過(guò)大量版本迭代和生產(chǎn)驗(yàn)證,可以適用大多數(shù)網(wǎng)站,歡迎使用。服務(wù)最終處理內(nèi)容,無(wú)論成功失敗都會(huì)執(zhí)行的步驟。

零:寫(xiě)在前面

uncs是java快速開(kāi)發(fā)爬蟲(chóng)的工具,簡(jiǎn)單便捷,經(jīng)過(guò)大量版本迭代和生產(chǎn)驗(yàn)證,可以適用大多數(shù)網(wǎng)站,歡迎使用。

一:基本用法

開(kāi)發(fā)包獲取
目前只能在公司內(nèi)網(wǎng)maven服務(wù)器獲取到

     
        com.cdc
        uncs
        3.0.0.6
    

開(kāi)發(fā)單步流程

步驟一

java
package com.cdc.uncs.service.parts;

import com.cdc.uncs.exception.UncsException;
import com.cdc.uncs.model.HttpCrawlInfo;
import com.cdc.uncs.model.TestRequest;
import com.cdc.uncs.model.TestResponse;
import com.cdc.uncs.service.NetCrawlPart;
import com.cdc.uncs.service.TransContext;

public class NetCrawlTestPart extends NetCrawlPart {

    @Override
    public void beforeCrawl(TransContext context, HttpCrawlInfo crawlInfo, String crawlId, String type) throws UncsException {
        String url = "http://www.baidu.com";
        crawlInfo.setUrl(url);
    }

    @Override
    public void afterCrawl(TransContext context, HttpCrawlInfo crawlInfo, String crawlId, String type) throws UncsException {
        System.out.println(crawlInfo.getHttpCrawlResult());
    }
}

步驟二

package com.cdc.uncs.service.parts;

import com.cdc.uncs.exception.UncsException;
import com.cdc.uncs.model.HttpCrawlInfo;
import com.cdc.uncs.model.TestRequest;
import com.cdc.uncs.model.TestResponse;
import com.cdc.uncs.service.NetCrawlPart;
import com.cdc.uncs.service.TransContext;

public class NetCrawlTestPart2 extends NetCrawlPart {

    @Override
    public void beforeCrawl(TransContext context, HttpCrawlInfo crawlInfo, String crawlId, String type) throws UncsException {

        String url = "http://www.hao123.com";
        crawlInfo.setUrl(url);
    }

    @Override
    public void afterCrawl(TransContext context, HttpCrawlInfo crawlInfo, String crawlId, String type) throws UncsException {
        System.out.println(crawlInfo.getHttpCrawlResult());
    }
}

服務(wù)配置文件

uncsTestApplicationContext.xml



    
        
            
            
        
    

demo樣例

        // ----------------------系統(tǒng)啟動(dòng)---------------------------
        // 用戶自定義的服務(wù)配置文件
        String xmlTest = "classpath*:uncsTestApplicationContext.xml";
        // 啟動(dòng)uncs的初始化參數(shù)   redis:ip、port socks5:ip、port 項(xiàng)目縮寫(xiě) http代理 獲取http代理超時(shí)時(shí)間 代理類(lèi)型
        InitParam param = new InitParam("127.0.0.1", 6379, "ss5.xx.com", 1080, "ct", "http://xxx", 3000, "no");
        // 啟動(dòng)uncs  param:啟動(dòng)參數(shù)  xmlTest...:服務(wù)配置文件,可以是多個(gè)
        UncsLancher.startUp(param, xmlTest);

        // ----------------------調(diào)用服務(wù)--------------------------
        // 定義上下文,貫穿整個(gè)服務(wù)
        TransContext transContext = TransContext.newInstance(TestRequest.class, TestResponse.class);
        // crawlId:單個(gè)爬取交易的唯一索引
        String crawlId = Long.toString(System.currentTimeMillis());
        // type:交易的類(lèi)型,輔助參數(shù),用戶自定義。例如爬取時(shí)可以把類(lèi)型作為type,可以貫穿整個(gè)交易
        String type = "xxx";
        transContext.setCrawlId(crawlId);
        transContext.setType(type);
        // 服務(wù)名稱(chēng),對(duì)應(yīng)配置文件中uncs:crawl標(biāo)簽的id
        String serverName = "testService";
        // 開(kāi)始執(zhí)行交易
        TestResponse response = UncsService.startService(serverName, transContext);
二:源碼url

svn地址:僅供公司內(nèi)部使用

三:約定

crawlId必輸,貫穿整個(gè)服務(wù)

流程內(nèi)的步驟實(shí)現(xiàn)類(lèi)必須繼承相關(guān)父類(lèi)

暫時(shí)必須使用redis為框架提供支持,以后會(huì)開(kāi)發(fā)不需要redis的單機(jī)版本

四:設(shè)計(jì)思想

基于流程化的爬蟲(chóng)開(kāi)發(fā)框架,參數(shù)動(dòng)態(tài)可配置化,可擴(kuò)展。能不讓用戶關(guān)心的,就不需要用戶去考慮,屏蔽一切可以屏蔽的細(xì)節(jié).

五:配置詳解 5.1 crawl交易配置

uncs:crawl標(biāo)簽

attr:

id:唯一服務(wù)名,例:testService

browser:瀏覽器類(lèi)型,枚舉:Chrome51(chrome瀏覽器),IE9,IE8,FIREFOX,DEFAULT,默認(rèn)是chrome瀏覽器,設(shè)置這個(gè)屬性,代碼就不需要設(shè)置http header的user-agent了

poolSize:服務(wù)運(yùn)行時(shí)線程池大小即這個(gè)服務(wù)支持的并發(fā)大小,如果不設(shè)置,則使用公共的線程池

proxyType:代理類(lèi)型,no-不使用代理 http:使用http代理 socks:socks5代理 default-http:默認(rèn)的http代理 default-socks:默認(rèn)的socks代理 (兩個(gè)默認(rèn)的代理類(lèi)型在初始化參數(shù)InitParam設(shè)置)

property:

uncs:list--流程列表,服務(wù)按順序執(zhí)行配置的實(shí)現(xiàn)類(lèi)列表,list內(nèi)支持所有類(lèi)型的part

uncs:finalPart--流程完成后,不管成功還是失敗,都會(huì)執(zhí)行的步驟

uncs:proxyService--擴(kuò)展的代理服務(wù),用戶可以自定義bean,來(lái)編寫(xiě)自己的代理服務(wù),當(dāng)uncs:crawl的attr-proxyType設(shè)置為http或socks時(shí),系統(tǒng)會(huì)加載這個(gè)標(biāo)簽的代理服務(wù),詳細(xì)參考“代理配置及使用”章節(jié)

5.2 part

所有模板步驟的父類(lèi),空模板,可以自由發(fā)揮

步驟:建立java類(lèi)-->繼承com.cdc.uncs.service.Part-->重寫(xiě)work方法-->配置文件

當(dāng)這個(gè)步驟可能不需要執(zhí)行時(shí),重新isPassPart方法,返回true即跳過(guò),所有子類(lèi)模板都有這個(gè)步驟

對(duì)應(yīng)配置文件標(biāo)簽:uncs:part class--實(shí)現(xiàn)類(lèi) desc--步驟名稱(chēng),不填默認(rèn)為類(lèi)名簡(jiǎn)寫(xiě)

5.3 netCrawlPart

網(wǎng)絡(luò)爬取步驟模板,用戶使用此模板就不用關(guān)心httpclient如何使用了

步驟:建立java類(lèi)-->繼承com.cdc.uncs.service.NetCrawlPart-->重寫(xiě)beforeCrawl和afterCrawl方法-->配置文件
beforeCrawl:爬取前組裝http請(qǐng)求參數(shù)

設(shè)置方法內(nèi)參數(shù)HttpCrawlInfo crawlInfo,來(lái)改變請(qǐng)求內(nèi)容

屬性名(-) 詳細(xì)(-)
method post/get
mineType img-圖片 json-暫不支持 html-文本
httpParamType form-表單 string-純字符串
url 爬取的url
referer 來(lái)源頁(yè)
charset 編碼,默認(rèn)是utf-8
isRelocal 是否自動(dòng)跳轉(zhuǎn)
params 表單參數(shù)
stringParam 當(dāng)httpParamType為string時(shí),才生效
headerParam http header參數(shù),支持Map方法和一個(gè)一個(gè)設(shè)置的方法,常用的header支持便捷設(shè)置方法,user-agent可以不設(shè)置,cookie不需要設(shè)置
httpCrawlResult/httpCrawlImgResult 用于保存返回結(jié)果
cookies 可以手工設(shè)置cookie
relocalList 當(dāng)isRelocal為true時(shí),頁(yè)面跳轉(zhuǎn)流程會(huì)在這保存
proxyService 可以多帶帶某個(gè)步驟設(shè)置代理
isNetErrThrow 發(fā)生網(wǎng)絡(luò)錯(cuò)誤時(shí),是否拋出異常,默認(rèn)不拋
isLogResponse 是否記錄返回日志
e 真正的異常對(duì)象
timeOut 單步超時(shí)時(shí)間
isJdkSafe 是否支持jdk1.7安全策略
tempInfo 臨時(shí)參數(shù),用戶部分http交互參數(shù)設(shè)置
tempInfo.usedProxy 但步驟代理策略
tempInfo.responseCode http返回碼
tempInfo.proxyParam 代理服務(wù)的參數(shù)
tempInfo.httpRetryMaxTimes 失敗后最大的重試次數(shù)
tempInfo.sslVersion 指定ssl協(xié)議版本號(hào)
tempInfo.clearCookie 是否清空cookie
tempInfo.poolEntityAliveTime http池化,每個(gè)鏈接存活時(shí)間
tempInfo.poolSize http池化,池大小
afterCrawl:爬取后解析返回結(jié)果

HttpCrawlInfo crawlInfo.getHttpCrawlResult和getHttpCrawlImgResult獲取返回結(jié)果

對(duì)應(yīng)配置文件標(biāo)簽,uncs:netCrawlPart,class--實(shí)現(xiàn)類(lèi) desc--步驟名稱(chēng),不填默認(rèn)為類(lèi)名簡(jiǎn)寫(xiě)
示例:


        
            
        
    

java

package xxx;

import xxx;

/**
 * 加載查詢
 */
public class FlowQueryPart extends NetCrawlPart {

    @Override
    public void beforeCrawl(TransContext context, HttpCrawlInfo crawlInfo, String s, String s1) throws UncsException {
        String url = (String) context.getTempParamValue(ParamKey.XXX);
        String referer = (String) context.getTempParamValue(ParamKey.REFXXX);
        
        crawlInfo.addAccept("text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8");
        crawlInfo.addAcceptEncoding("gzip, deflate, sdch");
        crawlInfo.addAcceptLanguage("zh-CN,zh;q=0.8");
        crawlInfo.addConnection("keep-alive");
        crawlInfo.addHost("XXX.com");

        crawlInfo.addParam("query", "true");
        crawlInfo.addParam("q_from_date",  (String) context.getTempParamValue(ParamKey.BEGIN_DATE));
        crawlInfo.addParam("q_to_date", (String) context.getTempParamValue(ParamKey.END_DATE));

        crawlInfo.setCharset(CoreConstant.CHARSET);
        crawlInfo.setMineType(MineType.HTML);
        crawlInfo.setMethod(HttpMethod.GET);
        crawlInfo.setUrl(url);
        crawlInfo.setReferer(referer);

        context.addTempParam(ParamKey.NEXT_REFERER, url);

    }

    @Override
    public void afterCrawl(TransContext context, HttpCrawlInfo crawlInfo, String crawlId, String bankCode) throws UncsException {
        String result = crawlInfo.getHttpCrawlResult();
        if(Strings.isNullOrEmpty(result)) {
            throw new SystemUncsException("網(wǎng)頁(yè)加載錯(cuò)誤", ErrorCode.XXX);
        }
    }
}
5.4 loopPart

循環(huán)步驟模板,已經(jīng)過(guò)時(shí)的模板,被complexLoopPart復(fù)雜循環(huán)步驟模板替換,不再維護(hù),可以使用,可能存在一些BUG,只支持單步驟循環(huán)

5.5 switchPart

選擇步驟模板,類(lèi)似java的switch,支持根據(jù)不同場(chǎng)景走不同分支步驟
場(chǎng)景舉例:某網(wǎng)站爬取時(shí),需要根據(jù)歸屬地省份的不同走不同的分支爬取
配置樣例:


        
          
            
                
                    
                        
                    
                
                
                    
                        
                    
                
            
        
    

代碼樣例:

package xxxx;
import xxxx;

public class ChooseKeyTestPart extends ChooseKeyPart {

    @Override
    public boolean isPassPart(TransContext context) {
        // 不需要發(fā)送網(wǎng)絡(luò)請(qǐng)求在這實(shí)現(xiàn)
        chooseKey("bj");
        return true;
    }

    @Override
    public void beforeCrawl(TransContext context, HttpCrawlInfo crawlInfo, String crawlId, String mobileType) throws UncsException {
        // 需要發(fā)送網(wǎng)絡(luò)請(qǐng)求來(lái)判斷的才需要實(shí)現(xiàn)
    }

    @Override
    public void afterCrawl(TransContext context, HttpCrawlInfo crawlInfo, String crawlId, String mobileType) throws UncsException {
    }
}
5.6 groupRetryPart

組重試步驟,可以實(shí)現(xiàn)整個(gè)步驟組重試,可設(shè)置最大重試次數(shù),是否重試需要用戶根據(jù)實(shí)際場(chǎng)景調(diào)用重試方法。
場(chǎng)景舉例:識(shí)別圖片驗(yàn)證碼成功率不是百分百,當(dāng)失敗時(shí)需要重新識(shí)別,重新驗(yàn)證
配置樣例:


        
              
            
                
                    
                
            
        
    

注:重試次數(shù)超過(guò)最大重試次數(shù)時(shí),需要由用戶自行判斷是否需要拋異常,默認(rèn)不拋異常,流程正常執(zhí)行
代碼樣例:

@Override
    public void afterCrawl(TransContext context, HttpCrawlInfo crawlInfo, String crawlId, String bankCode) throws UncsException {

        String result = crawlInfo.getHttpCrawlResult();
        if(Strings.isNullOrEmpty(result)) {
            throw new SystemUncsException("網(wǎng)頁(yè)加載錯(cuò)誤", ErrorCode.ERROR_3006);
        }
        // 校驗(yàn)結(jié)果
        try {
            CCBBaseUtil.validateResult(result, crawlId, bankCode, this.getName(), log);
        } catch (UncsException e) {
            String code = e.getCode();
            if(ErrorCode.ERROR_0000.equals(code)) {
                // 驗(yàn)證碼錯(cuò)誤,重試
                // 驗(yàn)證重試次數(shù)
                if(this.getGroupRetryCurrent(context) < this.getGroupRetryMax(context)) {
                    // 重試
                    retry();
                }else{
                    log.log(crawlId, this.getName(), bankCode, "圖片驗(yàn)證碼超過(guò)最大重試次數(shù)");
                    throw new SystemUncsException("圖片驗(yàn)證碼錯(cuò)誤次數(shù)超限,請(qǐng)重試,并檢查", ErrorCode.ERROR_2002);
                }
            } else {
                throw e;
            }
        }
    }
5.7 complexLoopPart

復(fù)雜循環(huán)步驟模板,類(lèi)似java的循環(huán),即支持for循環(huán)也支持while循環(huán),默認(rèn)是for循環(huán),支持任何模板套用。
新增支持循環(huán)橫向并發(fā)
場(chǎng)景舉例:

for循環(huán),爬取某網(wǎng)站數(shù)據(jù)時(shí),按月份循環(huán)爬取為第一層循環(huán),每個(gè)月類(lèi)型的分頁(yè)為第二層循環(huán)
while循環(huán),同for循環(huán),區(qū)別在于銀行的分支只有下一頁(yè),不知道總頁(yè)數(shù)

配置樣例:



                
                    
                    
                

代碼樣例:

    @Override
    public void beforeCrawl(TransContext context, HttpCrawlInfo crawlInfo, String crawlId, String mobileType) throws UncsException {

        // 獲取當(dāng)前循環(huán)次數(shù)
        this.getComplexLoopCurrent(context);
        getCookieValue(crawlId, "BAIDUID");
        String url = "http://www.baidu.com";
        crawlInfo.setUrl(url);
    }

    @Override
    public void afterCrawl(TransContext context, HttpCrawlInfo crawlInfo, String crawlId, String mobileType) throws UncsException {

        // 設(shè)置循環(huán)最大數(shù)次
        this.setComplexLoopMax(context, 5);
        System.out.println(crawlInfo.getHttpCrawlResult());
    }

注:循環(huán)內(nèi)部支持套用任何模板,但是只有循環(huán)內(nèi)所屬步驟才能操作循環(huán)的屬性(最大頁(yè)數(shù)、當(dāng)前頁(yè)數(shù)),循環(huán)內(nèi)循環(huán)的步驟無(wú)法跨級(jí)操作。

5.8 finalPart

服務(wù)最終處理內(nèi)容,無(wú)論成功失敗都會(huì)執(zhí)行的步驟。
場(chǎng)景舉例:爬取某網(wǎng)站后,為防止對(duì)登錄狀態(tài)進(jìn)行判斷,需要在結(jié)束后退出登錄
配置樣例:


        
            
                
                    
                    
                
            
        
        
            
        
    
六:斷點(diǎn)

uncs支持程序斷點(diǎn),即支持臨時(shí)中斷正在運(yùn)行的服務(wù),滿足某種場(chǎng)景時(shí),可以重新啟動(dòng)服務(wù),服務(wù)會(huì)從中斷的步驟繼續(xù)執(zhí)行。
場(chǎng)景舉例:爬取某網(wǎng)站時(shí),有時(shí)需要用戶輸入短信,此時(shí)需要人為參與,程序必須中斷,等用戶輸入短信后才可以繼續(xù)執(zhí)行
代碼示例:
中斷代碼

@Override
    public void afterCrawl(TransContext context, HttpCrawlInfo crawlInfo, String crawlId, String mobileType) throws UncsException {
        // 中斷一下
        this.pauseNeedMsg();
        System.out.println(crawlInfo.getHttpCrawlResult());
    }

重新啟動(dòng)服務(wù)

        // 重新啟動(dòng)服務(wù)
        String msgCode = "123456";
        TestResponse response1 = UncsService.restartService(crawlId, msgCode, null, TestResponse.class);
七:代理配置及使用

uncs支持http代理和socks5代理,支持用戶自定義代理獲取方式,也支持使用系統(tǒng)提供的代理方式,強(qiáng)擴(kuò)展性。
代理配置方式一:





代理配置方式二:


    
        
    
    
    
        
        
    
package com.cdc.uncs.http.impl;

import com.cdc.uncs.http.IHttpProxy;
import com.cdc.uncs.http.ISocksProxy;
import com.cdc.uncs.util.HttpGreenHelper;
import org.apache.http.HttpHost;

import java.util.HashMap;
import java.util.Map;

/**
 * 默認(rèn)http代理
 */
public class TestHttpProxy extends IHttpProxy {
    private String ip;
    private Object testxxxxx;
    public TestHttpProxy() {
    }

    /**
     * 獲取crawlId
     *
     * @param cid           唯一標(biāo)識(shí)
     * @param type          類(lèi)型
     * @param logServerName 日志標(biāo)識(shí)
     * @return
     */
    @Override
    public HttpHost getProxy(String cid, String type, String logServerName) {
        return new HttpHost(ip, 8888);
    }
    public String getIp() {
        return ip;
    }
    public void setIp(String ip) {
        this.ip = ip;
    }
    public Object getTestxxxxx() {
        return testxxxxx;
    }
    public void setTestxxxxx(Object testxxxxx) {
        this.testxxxxx = testxxxxx;
    }
}
代理配置方式三:可以在某個(gè)步驟多帶帶使用代理,參考《五-5.2 netCrawlPart》
八:日志配置及使用

uncs使用固定日志名,分為標(biāo)準(zhǔn)日志和uncs日志,標(biāo)準(zhǔn)日志是日志搜索系統(tǒng)要求的格式輸出,可以忽略,uncs日志表示業(yè)務(wù)日志
logback:



    ${log.base}/uncs%d{yyyy-MM-dd}.log
    
        
            ${log.base}/uncs.log.%d{yyyy-MM-dd}.log
        
    
    
        [%level] %date [%thread] - %msg%n
    


    ${log.base}/flow_standard%d{yyyy-MM-dd}.log
    
        
            ${log.base}/flow_standard%d{yyyy-MM-dd}.log
        
    
    
        %date{"yyyy-MM-dd,HH:mm:ss,SSS"}||%msg%n
    



    
    


    
    
九:異步化

提供異步化服務(wù)

// 異步啟動(dòng)服務(wù)
UncsService.ayncStartService
// 獲取當(dāng)前服務(wù)狀態(tài)
UncsService.getResponse
十:版本升級(jí)歷史

詳見(jiàn)《uncs提交歷史.md》
當(dāng)前最新版本3.0.0.6

十一:未來(lái)猜想

優(yōu)化代碼質(zhì)量,完善http初始化部分代碼(優(yōu)化完畢)及cookie處理部分代碼(完成)

讓part持有context,這樣部分方法不再需要context參數(shù)(完成)

提供快速生成代碼工具

提供可視化工具,隨時(shí)查看某個(gè)crawlId對(duì)應(yīng)的狀態(tài)

集成各大優(yōu)秀的爬蟲(chóng)框架,形成對(duì)應(yīng)模板

提供單機(jī)模式,可以選擇不使用redis,本地存儲(chǔ)

提供并發(fā)步驟模板,用于提高速度(完成)

十二:fiddler使用說(shuō)明

1、升級(jí)版本到2.3.0.1-SNAPSHOT以上

2、vm參數(shù)-Duncs.useFidder=1

3、fiddler配置 tools->fiddler options->https->actions->export root certificate to ...

4、binkeytool.exe -import -file C:UsersDesktopFiddlerRoot.cer -keystore FiddlerKeystore -alias Fiddler

作者:劉鵬飛 宜信技術(shù)學(xué)院

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/73030.html

相關(guān)文章

  • Beetl 快速入門(mén)

    摘要:簡(jiǎn)單快速了解是前端視圖填充數(shù)據(jù)的工具,是個(gè)頁(yè)面模板,可以像表達(dá)式那樣操作數(shù)據(jù),那樣公共代碼引用,很多好用的方法。目錄結(jié)構(gòu)快速接入深入了解待續(xù)。。。 簡(jiǎn)單快速了解 Beetl 是前端視圖填充數(shù)據(jù)的工具,是個(gè)頁(yè)面模板,可以像 el 表達(dá)式那樣操作數(shù)據(jù),jsp 那樣公共代碼引用,很多好用的方法。官方模板對(duì)比:showImg(https://segmentfault.com/img/bVbfa...

    wushuiyong 評(píng)論0 收藏0
  • 當(dāng)年玩耍httpclient

    摘要:當(dāng)年玩耍前言是開(kāi)發(fā)中最常用的工具之一,通常大家會(huì)使用去調(diào)用遠(yuǎn)程,使用其中比較基礎(chǔ)的,長(zhǎng)期開(kāi)發(fā)爬蟲(chóng),會(huì)接觸不常用的,同時(shí)會(huì)遇到各式各樣的坑,下面會(huì)總結(jié)這些年遇到的坑坑坑坑一解決過(guò)程開(kāi)發(fā)某省份移動(dòng)爬蟲(chóng)時(shí),加載首頁(yè)會(huì)報(bào)標(biāo)題錯(cuò)誤,嘗試各種辦法都不好 當(dāng)年玩耍httpclient 前言 httpclient是java開(kāi)發(fā)中最常用的工具之一,通常大家會(huì)使用httpcilent去調(diào)用遠(yuǎn)程,使用其中比...

    lykops 評(píng)論0 收藏0
  • 【微信小程序爬蟲(chóng)】表情包小程序圖文視頻教學(xué),從零寫(xiě)起,保姆教程!!!

    摘要:文章目錄前言爬取分析視頻教學(xué)成果展示福利入門(mén)到就業(yè)學(xué)習(xí)路線規(guī)劃小白快速入門(mén)爬蟲(chóng)路線前言皮皮蝦一個(gè)沙雕而又有趣的憨憨少年,和大多數(shù)小伙伴們一樣喜歡聽(tīng)歌游戲,當(dāng)然除此之外還有寫(xiě)作的興趣,,日子還很長(zhǎng),讓我們一起加油努力叭話 ...

    coordinate35 評(píng)論0 收藏0
  • python模塊之os.path

    摘要:返回的絕對(duì)路徑名返回文件名,等同于調(diào)用返回值的第二個(gè)元素。與不同,此函數(shù)的返回值一定是一個(gè)有效路徑。返回值是自時(shí)間算起的浮點(diǎn)值,單位為秒。規(guī)范路徑名中的多余分隔符以及上級(jí)引用,如將全部轉(zhuǎn)換為。 os.path.abspath(path) 返回path的絕對(duì)路徑名 >>> os.path.abspath(.) C:UsersadminDesktopPycharmProjectspytho...

    mrli2016 評(píng)論0 收藏0
  • 從零開(kāi)始寫(xiě)爬蟲(chóng)

    摘要:幾個(gè)朋友對(duì)爬蟲(chóng)很感興趣,他們也都是開(kāi)發(fā)人員,一個(gè)開(kāi)發(fā)兩個(gè)開(kāi)發(fā),都沒(méi)有過(guò)項(xiàng)目開(kāi)發(fā)經(jīng)驗(yàn),正好其中一個(gè)最近要爬一個(gè)網(wǎng)店的產(chǎn)品信息,所以希望我能拿這網(wǎng)站當(dāng)寫(xiě)一個(gè)爬蟲(chóng)來(lái)給他們參考學(xué)習(xí)。我們就在這個(gè)文件里開(kāi)發(fā)爬蟲(chóng)的相關(guān)邏輯。 幾個(gè)朋友對(duì)爬蟲(chóng)很感興趣,他們也都是開(kāi)發(fā)人員,一個(gè)PHP開(kāi)發(fā)兩個(gè)JAVA開(kāi)發(fā),都沒(méi)有過(guò)python項(xiàng)目開(kāi)發(fā)經(jīng)驗(yàn),正好其中一個(gè)最近要爬一個(gè)網(wǎng)店的產(chǎn)品信息,所以希望我能拿這網(wǎng)站當(dāng)d...

    wwq0327 評(píng)論0 收藏0

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<