クロールの電力供給情報IPHONEの練習の手

は/ usr / binに/ ENVのpython! - * -コーディング:UTF-8 - * - @time:2019年12月30日午前10時51分@Site: @file:jd_iphone.py @Software:PyCharm 

インポートJSONの
 インポート時間
 インポートurllib3の
 インポートログ
 インポート要求
 から pyquery インポートPyQuery
 からセレンインポートwebdriverをする

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) fidder抓包忽略请求警告 
ヘッダー= {
         "リファラー"" https://search.jd.com/ " " ユーザーエージェント"" Mozillaの/ 5.0(Windows NTの6.1; Win64の、x64の)のAppleWebKit / 537.36(ヤモリのようにKHTML、)クローム/ 78.0.3904.108サファリ/537.36 " 
    } 控制台日志输出 
logging.basicConfig(レベル= logging.INFO、フォーマット= ' %(いるasctime)S - %(名)S - %(levelname)S - %(メッセージ)S ' 
logger_page = logging.getLogger(" jd_iphone_page " 
logger_detail = logging.getLogger(" jd_iphone_detail "


DEFのget_page_detail(をmaxP):
    product_list = [] 
    p_no = 0
     のためのページ範囲(をmaxP * 1,2、2 ):
        URL = ' https://search.jd.com/Search?keyword=iphoneapple&page= ' + STR(ページ)+ ' &クリック= 0 ' #はiPhone、リンクスクリーニング
        RESP = requests.get(URL、ヘッダ=ヘッダ、確認してください= False)が
        #のブラウザウィンドウレスモード 
        chrome_options = webdriver.ChromeOptions()
        (chrome_options.add_argumentを" -ヘッドレス" 
        ドライバー= webdriver.Chrome(chrome_options = chrome_options)
        ドライバ= webdriver.Chrome()
        driver.get(URL)
        driver.implicitly_wait( 10 执行JS滚动条 
        JS = ''」
        タイマ=たsetInterval(関数(){ 
           VAR scrollTopスプライト= document.documentElement.scrollTop || document.body.scrollTopは、
           VaRはispeed = Math.floor(document.body.scrollHeight / 100); 
           IF(scrollTopスプライト> document.body.scrollHeight * / 100 90){ 
               てclearInterval(タイマー); 
           } 
           console.log( 'scrollTopスプライト:' + scrollTopスプライト) 
           console.log( 'scrollHeight:' + document.body.scrollHeight)
           window.scrollToは(0、+ scrollTopスプライトispeed)
        }、20)
        '' ' 
        driver.execute_script(JS)
        time.sleep( 5 
        HTML = driver.page_source 
        DOC = pyquery(HTMLパーサ= " HTML "パラメータなしパーサー= "HTML"はpyquery HTML解析文字列型、解決することはできないが、上記のタイプは、XHTMLである 
        (logger_page.info " %sのページのデータを取得...... "%((+ 1ページ)/ 2 ))
         のための項目 DOC(" #J_goodsList李" []).items():
            tmp_list = data_sku
            KEY_LIST = [] データ情報のiPhone取り外すことなく認証キー、
            #は、情報取得 
            data_sku = item.attr(' データSKU ' 
            パラ = " .J_の%S "%のdata_sku 
            。価格 = item.find(パラ)。テキスト()
            取得店舗の 
            ショップitem.find =(' .J_im_icon ' )の.text()
            タブ 
            tag_p = " #J_pro_%S "
            タグ = item.find(tag_p)は.text()
            製品は、リンク 
            項目= item.find(" .glラップDIV-I-A " のためのフォント item.find(' フォント' :).items()
                key_list.append(font.text())
            のhref = item.attr (' HREF ' アップルの携帯電話かどうかを判断
            した場合(U ' りんご'  KEY_LIST)または(U ' iPhone '  KEY_LIST)または KEY_LIST)(U ' アップル'  
                    tmp_list.append(ショップ)または(U ' りんご' KEY_LIST):
                 もし " のhttp:"  HREF:
                    HREF = HREF [5 :] 
                    tmp_list.append(HREF)
                    tmp_list.append(価格)
                    tmp_list.append(ショップ)
                    tmp_list.append(タグ)
                    product_list .append(tmp_list)
                
                    tmp_list.append(HREF)
                    tmp_list.append(価格)
                    tmp_list.append(タグ)
                    product_list.append(tmp_list) 
                p_no + =。1 
                logger_page.info(' 取得ページ%sの、%sの製品の... ... '%(((ページ+ 1)/ 2 )、p_no))
             続行
    印刷(product_list) 
    印刷(LEN(product_list))
    リターンproduct_listの

DEFのproduct_detail(一覧):
    NO = 0 
    Product_Info = []
     のためのリンク一覧:
        URL = ' HTTP:' + リンク[0]
        logger_detail.info(" 正在获取第%の条信息......"%(NO + 1 ))
        なし + = 1 
        detail_html = requests.get(URL、ベリファイ= 偽)
        DOC = PyQuery(detail_html.text、パーサ= " HTML " 

        product_dic = {
             " タイトル":DOC(" .itemInfo -wrap div.sku名" )の.text()、
             " jd_price ":リスト[無1] [1 ]、
             " ショップ":リスト[無1] [2 ]、
             " タグ:リスト[NO- 1]〜[3 ]
            " ":DOC(" #選択-ATTR-1 div.item " )の.text()、
             " RAM ":DOC(" #選択-ATTR-2 div.item " )の.text()、
             " style_buy "。 DOC(" #選択-ATTR-3 div.item " )の.text()、
            "増分":DOC( "#要約支援のdivスパン")のテキスト()。
        } 
        product_info.append(product_dic) 
        印刷(」第%sの条iPhone信息: "%(NO + 1)) 
        プリント(json.dumps(product_dic、コード= 'UTF-8'、ensure_ascii =偽)) 
    戻りproduct_info
        #の印刷(json.dumps(product_dic、エンコード= 'UTF-8'、ensure_ascii =偽))#字典中文输出


場合 __name__ == ' __main__ ' 
    リスト = get_page_detail(1 #の印刷(json.dumps(リスト、コード= 'UTF-8'、ensure_ascii =偽)) 
    reasult = product_detail(リスト)
     プリント(json.dumps(reasult、エンコーディング= ' UTF-8 '、ensure_ascii =偽))

おすすめ

転載: www.cnblogs.com/East-fence/p/12129371.html