一,環境的搭建已經簡單的工具介紹
1.selenium,一個用于Web應用程式測驗的工具,其特點是直接運行在瀏覽器中,就像真正的用戶在操作一樣,新版本selenium2集成了 Selenium 1.0 以及 WebDriver;
2.webDriver作用如下:執行代碼通過給Webdriver發送指令,讓Webdriver知道想要做的操作,Webdriver再根據這些操作在瀏覽器界面上進行控制,例如查找頁面元素、發送文本、實作事件點擊等等;
3.pyquery作用如下:此處用到的pyquery主要是一個對html代碼資料進行提取的庫,可以用來替代beautifulsoup和正則運算式對h5的提取,
如何匯入所需要的庫:
大部分教程中對于庫的匯入都是使用的pip install指令,但是當安裝了多個python版本或者自己不知道自己python路徑的時候,在python中可能無法呼叫下載的python庫,此處直接使用pycharm進行匯入,示例如下:

點擊file->setting

點擊python interpreter右上角的加號,
在界面中搜索想要的庫,點擊intsall package,便可以匯入了,
二.使用selenium模擬瀏覽器訪問京東頁面,
from selenium import webdriver from selenium.common.exceptions import TimeoutException from selenium.webdriver.common.by import By from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from webdriver_manager.chrome import ChromeDriverManager from pyquery import PyQuery as pq browser = webdriver.Chrome(ChromeDriverManager().install()) #打開Chrome 瀏覽器 wait = WebDriverWait(browser,10) try: browser.get('https://www.jd.com') input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,"#key"))) #對輸入框進行指定 sbmit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#search > div > div.form > button'))) #使用submit表示按鈕 input.send_keys('內容') #輸入內容 sbmit.click() #點擊按鈕 total = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#J_bottomPage > span.p-skip > em:nth-child(1) > b'))) get_product() return total.text except TimeoutException: search()說明
上方實作功能為打開京東并在搜索框中輸入內容框所指示的部分然后進行搜索,如果代碼有報錯無法打開chrome,是因為沒有使用webdriver_manager庫,添加該庫,其作用是自動聯網下載chromedriver是的webdriver.chrome可以運行,
三. 模擬連續翻頁,方便進行搜索
函式代碼如下:
def next_page(page_number): try: input = wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#J_bottomPage > span.p-skip > input'))) submit = wait.until(EC.element_to_be_clickable((By.CSS_SELECTOR,'#J_bottomPage > span.p-skip > a'))) input.clear() input.send_keys(page_number) submit.click() wait.until(EC.text_to_be_present_in_element((By.CSS_SELECTOR,'#J_bottomPage > span.p-num > a.curr'),str(page_number))) get_product() except TimeoutException: next_page(page_number)
函式的功能為模擬在輸入框中輸入頁碼page_number,然后使用sunbmit.click陳述句嗎,模擬點擊翻頁,
四.對資料進行抓取,并進行決議,
函式代碼如下:
def get_product(): # wait.until(EC.presence_of_element_located((By.CSS_SELECTOR,'#J_goodsList .gl-warp .gl-item'))) #檢測圖片是否加載完成 html = browser.page_source #獲取網頁源代碼 doc = pq(html) items = doc('#J_goodsList .gl-warp .gl-item').items() #獲取所有的選擇內容 for item in items: product = { 'image': item.find('.p-img img').attr('src'), #通過獲取src屬性來獲取圖片 'price': item.find('.p-price').text(), #獲取文字內容 'name': item.find('.p-name').text(), #獲取物品標題 'shop': item.find('.p-shop').text() #獲取商鋪資訊 } print(product)
此處使用到的庫為pyquery,通過selenium庫對網頁源代碼進行獲取,然后通過pyquery的find陳述句查找相應的元素裝載到product中,最后進行列印,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/10158.html
標籤:Python
