python 爬蟲 汽車之家車輛參數反爬


水平有限,僅供參考。


如圖所示,汽車之家的車輛詳情里的數據做了反爬對策,數據被CSS偽類替換。


觀察 Sources 發現數據就在當前頁面。


發現若干條進行CSS替換的js


繼續深入此JS


知道了數據與規則,剩下的交給PYTHON。


def repliceStr(browser,textJs,Js):        

    _config_pos=textJs.find("return '.")
    JsSplit=textJs[_config_pos:_config_pos+70]

    ClassHead=re.search("[A-Za-z]{2}_[A-Za-z]{2}",JsSplit,re.S).group(0)
    ClassFoot=re.search("_[A-Za-z]+';",JsSplit,re.S).group(0)[:-2]

    pos=textJs.find("$InsertRule$($index$, $temp$);")
    top=textJs[0:pos]
    bottom=textJs[pos:]


    JsBack = browser.execute_script('''

        var suc={};

    '''+top+'  suc[$index$]=$temp$;  '+bottom+'''

        return suc

    ''')

    for cj in range(0,len(JsBack)):

        cjclass=ClassHead+str(cj)+ClassFoot
        Js=re.sub("<span class='"+cjclass+"'></span>",JsBack[str(cj)], Js)


    return Js


#獲取詳情頁的數據
def getDetail(base_url):
    
    chrome_options = webdriver.ChromeOptions()
    chrome_options.add_argument('--headless')
    browser = webdriver.Chrome(chrome_options=chrome_options)
    browser.get(base_url)




    #在這里進行文件替換,反爬頁面
    #keyLink = re.search("var keyLink = (.*?)}];", browser.page_source, re.S)
    config  = re.search("var config = (.*?)};", browser.page_source, re.S)
    option  = re.search("var option = (.*?)};", browser.page_source, re.S)

    option=option.group(0)[13:-1]
    config=config.group(0)[13:-1]

    script  = re.findall("<script>(.*?)</script>", browser.page_source,re.S)

    for i in range(0,len(script)):

        if re.search("_config",script[i],re.S) :

            config=repliceStr(browser,script[i],config)

        if re.search("_option",script[i],re.S) :

            option=repliceStr(browser,script[i],option)




    option=demjson.decode(option);
    config=demjson.decode(config);

    carr={}
    for item in config['result']['paramtypeitems'] :
        bigTitle=item['name']
        carr[bigTitle]={}
        index=0
        for ni in item['paramitems']:
      
            cate =ni['name']
            value=ni['valueitems'][0]['value']
            carr[bigTitle][index]=[cate,value]

            index=index+1
     

    for item in option['result']['configtypeitems'] :
        bigTitle=item['name']
        carr[bigTitle]={}
        index=0
        for ni in item['configitems']:
      
            cate =ni['name']
            value=ni['valueitems'][0]['value']
            carr[bigTitle][index]=[cate,value]

            index=index+1


    time.sleep(10)

    return carr

剛接觸PYTHON,還在學習中,找不到更好的解法。
好像有比selenium更好用的工具了 推薦 python+pyppeteer+chrome


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM