1. 程式人生 > >Python Selenium + PhantomJS爬取考拉海購商品資料

Python Selenium + PhantomJS爬取考拉海購商品資料

爬完QQ音樂以後打算爬網易雲音樂的,中間出了一點小狀況,就改爬考拉海購了(什麼狀況你猜呀❛˓◞˂̶✧以後會爬完網易雲音樂的!)
今天寫近段時間的最後一篇,寫完這篇就要開始期末複習了,寒假再來更新

pip install selenium

下載selenium

這次用到的東西官方文件都可以查到,我就不細說了,直接上程式碼

import time
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import
WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.common.exceptions import TimeoutException#用來處理超時異常 from pyquery import PyQuery as pq#用來解析網頁原始碼 from sqlalchemy import create_engine,MetaData#引入資料庫引擎create_engine以及引入MetaData來建立表格 from sqlalchemy.orm import sessionmaker#引入sessionmaker(用來建立資料工廠)
from sqlalchemy import Table,Column,Text#引入我們需要用到的屬性 from sqlalchemy.sql import insert#引入插入語句 #建立一個數據庫引擎,呼叫create_engin方法,連線postgresql資料庫,使用者名稱為postgres,密碼為123456,儲存地址為本地儲存,埠為5432資料庫名為postgres engine = create_engine('postgresql://postgres:[email protected]:5432/postgres') meta = MetaData(bind = engine)#將MetaData繫結到引擎上
Session = sessionmaker(bind = engine)#將sessionmaker繫結到引擎上,建立一個session工廠 session = Session()#呼叫工廠方法來建立一個session物件 KaoLa_table = Table('KaoLa', meta, # 表名為KaoLa,資料庫內一定不能有相同表名!!! Column('good_name', Text), # 將good_name作為列名(key),並用primary設定為主key,用Text型別顯示 Column('price', Text), Column('comment', Text), Column('origin', Text), Column('store', Text), Column('url', Text)) meta.create_all() # 建立表格 choice = ['--load-images=false','--disk-cache=true']#PhantomJS的api,不載入圖片,開啟快取 browser = webdriver.PhantomJS(service_args=choice)#選擇PhantomJS瀏覽器並加入引數 browser.set_window_size(1400,900)#設定瀏覽器視窗大小,便於selenium執行 waite = WebDriverWait(browser, 10)#設定等待時間 key = '彩妝'#設定需要搜尋的關鍵字 def search(): print('搜尋中') try: browser.get('https://www.kaola.com') # 用來關閉彈窗 close = waite.until( EC.element_to_be_clickable((By.CSS_SELECTOR, "#index-netease-com > table > tbody > tr > td > div > div > div > div > div.modal-body > div > div.u-close")) ) # 用來輸入搜尋內容 input = waite.until( EC.presence_of_element_located((By.CSS_SELECTOR, "#topSearchInput"))#用css_selector檢索 ) #用這個方法去點選,select會受上一次select的影響,從而使click失效 #submit = waite.until( #EC.element_to_be_clickable((By.XPATH, "//*[@id='topSearchBtn']")) #) close.click() input.send_keys(key) #submit.click() # 上面click點選失效的問題用此法解決了 js大法好 #用來點選搜尋 js = 'document.getElementsByClassName("w-icon w-icon-27")[0].click();' browser.execute_script(js) print('當前正在第 1 頁') get_products() except TimeoutException: return search() def next_page(): try: click_next = waite.until( EC.element_to_be_clickable((By.CSS_SELECTOR, "#resultwrap > div.splitPages > a.nextPage")) ) click_next.click() now_page = browser.find_element_by_xpath("//*[@id='resultwrap']/div[3]/span[1]").text#用xpath方法檢索 print('當前正在第', now_page, '頁') time.sleep(1) get_products() return next_page() #這裡最後一頁不存在下一頁按鈕,所以處理必定超時,可以用這個超時來判斷是否翻頁完畢 except TimeoutException: end_page = browser.find_element_by_xpath("//*[@id='resultwrap']/div[3]/span[1]").text print('翻頁完畢,第',end_page,'頁') print('儲存完畢') def get_products(): waite.until( EC.presence_of_element_located((By.CSS_SELECTOR, "#result > li > div")) ) html = browser.page_source#用這個語句拿到整個網頁的原始碼 doc = pq(html)#用PyQuery解析 goods = doc("#result > li > div").items() kaola_url = 'https://www.kaola.com' for good in goods: #用find方法檢索 product = { 'good_name': good.find('.title').text(), 'price': good.find('.cur').text(), 'comment':good.find('.comments').text(), 'origin':good.find('.proPlace.ellipsis').text(), 'store':good.find('.selfflag').text(), 'url':kaola_url + good.find('.title').attr('href') } save_data(product) def save_data(data): try: i = insert(KaoLa_table) # 插入資料 i = i.values({'good_name': data['good_name'], 'price': data['price'], 'comment': data['comment'], 'origin': data['origin'], 'store': data['store'], 'url': data['url']}) session.execute(i) # 將資料插入表格 session.commit() # 提交到資料庫中 print('儲存成功:',data) except Exception: print('儲存失敗:',data) if __name__ == "__main__": try: search() next_page() except Exception: print('出錯啦') finally: browser.close()#記得關閉瀏覽器

中間出了個小bug,就是我註釋掉的這一段
這裡寫圖片描述
這裡click失效了,百度到了解決方法
js解決click失效問題參考部落格

開始爬
這裡寫圖片描述

爬完
這裡寫圖片描述

看一下資料庫裡的情況
這裡寫圖片描述

完美

到這裡就結束啦~寒假見
冷…
這裡寫圖片描述

相關推薦

Python Selenium + PhantomJS商品資料

爬完QQ音樂以後打算爬網易雲音樂的,中間出了一點小狀況,就改爬考拉海購了(什麼狀況你猜呀❛˓◞˂̶✧以後會爬完網易雲音樂的!) 今天寫近段時間的最後一篇,寫完這篇就要開始期末複習了,寒假再來更新 pip install selenium 下載s

python+selenium+PhantomJS網頁動態加載內容

use for ive comm 自動化測試 mac os x page 影響 blank 一般我們使用python的第三方庫requests及框架scrapy來爬取網上的資源,但是設計javascript渲染的頁面卻不能抓取,此時,我們使用web自動化測試化工具Selen

python+selenium批量IEEExplore論文

原文出處:https://blog.csdn.net/qq_25072387/article/details/78588173 一、環境搭建 首先下載安裝selenium包,推薦直接使用pip 之後還要下載對應瀏覽器的驅動(driver),這裡使用的是chrome瀏覽器

【原創】Python+Scrapy+Selenium簡單淘寶天貓商品資訊及評論

(轉載請註明出處)哈嘍,大家好~前言:這次寫這個小指令碼的目的是為了給老師幫個小忙,爬取某一商品的資訊,寫完覺得這個程式似乎也可以用在更普遍的地方,所以就放出來給大家看看啦,然後因為是在很短時間寫的,所以自然有很多不足之處,想著總之實現了功能再說吧,程式碼太醜大不了之後再重構

網易Dubbok框架優化詳解

摘要:微服務化是當前電商產品演化的必然趨勢,網易考拉海購通過微服務化打破了業務爆發增長的架構瓶頸。本文結合網易考拉海購引用的開源Dubbo框架,分享支援考拉微服務工作的基本原理。文章分析了使用Dubbo過程中遇到的問題,講解了團隊所做的一些問題修復和功能整

網易Java後臺開發實習-面經(已拿offer)

一面(23min) 自我介紹 專案中最自豪的部分 也沒什麼太自豪的,就是在移動端開發的時候不存在cookie和session,然後用redis存了一下驗證碼感覺還不錯。 講一講ArrayList和LinkedList ArrayList底層實現是陣列,並

25.去哪兒網的商品資料-1

1.首先分析頁面資訊頁面地址:http://touch.qunar.com/爬取度假中的自由行頻道資訊可以看到某一城市xhr獲取資訊:     request.url : https://touch.dujia.qunar.com/list?modu

25.去哪兒網的商品資料-2

  需要注意的問題:1.首先要獲取dep和query引數。2.分析請求的url地址變化,獲取routeCount引數。我配置程式碼出現的問題:1.url拼接問題,網站拒絕訪問,模擬請求引數設定user-agent和cookie2.獲取routeCount引數會報異常,因為有的url返回的資料

[Python爬蟲]Scrapy配合SeleniumPhantomJS動態網頁

Python世界中Scrapy一直是爬蟲的一個較為成熟的解決方案,目前javascript在網頁中應用越來越廣泛,越來越多的網站選擇使用javascript動態的生成網頁的內容,使得很多純html的爬蟲解決方案失效。針對這種動態網站的爬取,目前也有很多解決方案。

使用selenium結合PhantomJS淘寶美食並存儲到MongoDB

cnblogs exc cte ota browser -- pre command out PhantomJS是一種沒有界面的瀏覽器,便於爬蟲 1、PhantomJS下載 2、phantomjs無須安裝driver,還有具體的api參考: http://phantomj

selelinum+PhantomJS 鉤網職位

one while 對象 bili exe 5.0 設置 expect money 使用selenium+PhantomJS爬取拉鉤網職位信息,保存在csv文件至本地磁盤 拉鉤網的職位頁面,點擊下一頁,職位信息加載,但是瀏覽器的url的不變,說明數據不是發送get請求得到的

Python爬蟲:勾網資料分析崗位資料

1 JSON介紹 JSON(JavaScript Object Notation)已經成為通過HTTP請求在Web瀏覽器和其他應用程式之間傳送資料的標準格式之一。比CSV格式更加靈活。Json資料格式,非常接近於有效的Pyhton程式碼,其特點是:JSON物件所

selenium+chromedrive js載入的動態網頁(下才能顯示內容)

from selenium import webdriver from selenium.webdriver.common.keys import Keys #呼叫鍵盤操作 from selenium.webdriver.chrome.options import Opt

Python爬蟲:Selenium+ BeautifulSoup JS渲染的動態內容(雪球網新聞)

爬取目標:下圖中紅色方框部分的文章內容。(需要點選每篇文章的連結才能獲得文章內容) 注:該文章僅介紹爬蟲爬取新聞這一部分,爬蟲語言為Python。  乍一看,爬蟲的實現思路很簡單: (2)通過第一步所獲得的各篇文章的URL,抓取文章內容。 但是發現簡單使用urlli

pythonSelenium+pyquery有大量反爬蟲的天眼查

天眼查:一個還有大量公司的資訊的網站。 所以反爬程度是相當高的,首先直接用requests.get(url)來獲取頁面原始碼,你會發現,明明顯示在頁面上的公司的一些資料都不在,他是利用其它的js的方法表達出來的,因為這個網站有專門的反爬蟲人員,可以在一些招聘網上

勾網 selenium 模擬

#encoding: utf-8 from selenium import webdriver from selenium.webdriver.support.ui import Select,WebDriverWait from selenium.webdriver.common.by import

Python 爬蟲入門-勾網實戰

這幾天學習了 python 爬蟲的入門知識,也遇到很多坑,開個貼記錄一下 基本原理 Python 爬蟲基本要具備以下功能:(參考此回答) 向伺服器傳送請求,伺服器響應你的請求。(你可能需要了解:網頁的基本知識) 從抓取到的網頁中提取出需要

利用python的bs4和selenium庫結合實現動態頁面的天氣網上面的歷史天氣資料

報告分析需要歷史氣象資料,查詢到天氣網上面有歷史天氣資料,從2011年到2018年,第一次接觸爬蟲,在網上找了爬取天氣網歷史資料的python原始碼,利用bs4庫,但是實際操作中發現soup.select( )函式返回的列表總是[ ] (空),查詢發現天氣網目前使用的是javascript寫的動態頁

Python網路爬蟲(四):selenium+chrome美女圖片

說明: Python版本:Python IDE:PyCharm chrome版本:我的版本63 chromedriver.exe:因為是模擬瀏覽器訪問,chrome需要再下載一個驅動,具體方式在我的上一篇部落格,內容很詳細。傳送門:Python網路爬蟲(

Python爬蟲scrapy框架動態網站——scrapy與selenium結合資料

 scrapy框架只能爬取靜態網站。如需爬取動態網站,需要結合著selenium進行js的渲染,才能獲取到動態載入的資料。如何通過selenium請求url,而不再通過下載器Downloader去請求這個url?方法:在request物件通過中介軟體的時候,在中介軟體內部開始