1. 程式人生 > >爬蟲之selenium-無介面瀏覽器使用

爬蟲之selenium-無介面瀏覽器使用

selenium+phantomjs selenium是什麼?是一個瀏覽器的自動化測試工具,就是通過寫程式碼去操作瀏覽器,讓瀏覽器做一些自動化的工作 selenium如何操作谷歌瀏覽器 安裝selenium,pip install selenium 步驟:selenium操作谷歌瀏覽器,其實是操作谷歌瀏覽器的驅動,由驅動再去驅動瀏覽器 谷歌瀏覽器驅動下載地址 http://chromedriver.storage.googleapis.com/index.html http://npm.taobao.org/mirrors/chromedriver/ http://blog.csdn.net/huilan_same/article/details/51896672

headlesschrome phantomjs是無介面瀏覽器 谷歌無介面模式 from selenium.webdriver.chrome.options import Options chrome_options = Options() chrome_options.add_argument(’–headless’) chrome_options.add_argument(’–disable-gpu’) selenium驅動火狐瀏覽器 下載火狐驅動 https://github.com/mozilla/geckodriver/releases 版本對映 https://blog.csdn.net/yinshuilan/article/details/79730239
firefox_options = webdriver.FirefoxOptions() firefox_options.set_headless() firefox_options.add_argument(’–disable-gpu’) 在這裡我爬取的是JD,程式碼如下:

from lxml import etree
from selenium import webdriver
import json
import time
from selenium.webdriver.chrome.options import Options



    # 獲取沒頁面內容
def save_content(driver, fp):

    response1 = driver.page_source
    tree1 = etree.HTML(response1)
    a_href_list = tree1.xpath('//ul[@class="gl-warp clearfix"]/li//div[@class="p-img"]/a/@href')
    chrome_options1 = Options()
    chrome_options1.add_argument('--headless')
    chrome_options1.add_argument('--disable-gpu')
    driver1 = webdriver.Chrome(executable_path=r'F:\chromedriver.exe',
                              chrome_options=chrome_options1)
    for a_href in a_href_list:
        a_href = 'http:' + a_href
        driver1.get(url=a_href)
        response2 = driver1.page_source
        tree2 = etree.HTML(response2)
        # get_attribute 獲取屬性
        # text 獲取文字
        C_name = driver1.find_element_by_xpath('.//div[@class="sku-name"]').text  # 獲取電腦基本資訊
        C_price = driver1.find_element_by_xpath('.//div[@class="dd"]/span/span[2]').text  # 獲取電腦報價
        C_style = driver1.find_element_by_xpath('.//div[@id="store-prompt"]/strong').text  # 獲取商品狀態
        C_image = driver1.find_element_by_xpath('.//div[@id="preview"]//img').get_attribute(
                    'src')  # 獲取電腦圖片
        # 商品品牌
        C_brand = tree2.xpath('//ul[@id="parameter-brand"]/li/@title')[0]
        # 商品編號
        C_styleid = tree2.xpath('//ul[@class="parameter2 p-parameter-list"]/li[2]/text()')[0].strip('商品編號:')
        # 商品產地
        C_origin = tree2.xpath('//ul[@class="parameter2 p-parameter-list"]/li[4]/text()')[0].strip('商品產地:')
        item = {
                '商品圖片': C_image,
                '商品資訊概括': C_name,
                '商品品牌': C_brand,
                '商品價格': C_price,
                '商品編號': C_styleid,
                '商品產地': C_origin,
                '商品狀態': C_style,
        }
        string = json.dumps(item, ensure_ascii=False)
        fp.write(string + '\n')
        print('正在下載%s' % C_name)
def run():
    chrome_options = Options()
    chrome_options.add_argument('--headless')
    chrome_options.add_argument('--disable-gpu')
    driver = webdriver.Chrome(executable_path=r'F:\第四階段\day06\day06_pm\ziliao\chromedriver.exe',
                                   chrome_options=chrome_options)
    driver.get("https://list.jd.com/list.html?cat=670%2C671%2C672&go=0")
    time.sleep(3)  # 每次傳送完請求等待三秒,等待頁面載入完成
    # 請求首頁
    # 1.傳送首頁的請求
    # 2.獲取第一頁的資訊
    fp = open("jd.txt", "w", encoding='utf8')
    # 儲存內容
    save_content(driver,fp)
    # 3.迴圈  點選下一頁按鈕,知道下一頁對應的class名字不再是"pn-next"
    while driver.find_element_by_class_name("pn-next"):  # 判斷有沒有下一頁
        # 點選下一頁的按鈕
        driver.find_element_by_class_name("pn-next").click()  #
        # 4.繼續獲取下一頁的內容,儲存內容
        save_content(driver,fp)
    # 走到這認為沒有下一頁,關閉檔案
    fp.close()


if __name__ == "__main__":
    run()