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配合Selenium和PhantomJS爬取動態網頁
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
python之Selenium+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物件通過中介軟體的時候,在中介軟體內部開始