Python爬蟲實戰,selenium模擬登錄,Python實現抓取京東商品數據

前言

今天爲大家帶來利用Python模擬登錄京東商品數據抓取,廢話不多說。

Let's start happily

開發工具

**Python版本: ** 3.6.4

相關模塊:

selenium模塊

time模塊

requests模塊

lxml模塊

csv模塊

環境搭建

安裝Python並添加到環境變量,pip安裝需要的相關模塊即可。

思路分析

本文以爬蟲抓取京東商品,講解如何爬取模擬登錄京東抓取數據

1.獲取頁面信息

class JdSpider(object):
    def __init__(self):
        self.i = 0
        self.url = "https://www.jd.com"
        self.browser = webdriver.Chrome(r"C:/python-3.9.6-embed-amd64/Application/chromedriver.exe")

2.獲取頁面信息 --到具體商品頁面

def get_html(self):
        # self.browser.set_window_size(1200, 800)         # 控制瀏覽器大小
        # self.browser.back()                           # 瀏覽器後退
        # self.browser.forward()                        # 瀏覽器前進

        self.browser.get(self.url)
        self.browser.execute_cdp_cmd("Page.addScriptToEvaluateOnNewDocument",
                                     {
                                         "source": """Object.defineProperty(navigator, 'webdriver', {get: () => undefined})"""})
        a = input('請輸入你想要的商品:')
        self.browser.find_element_by_xpath('//*[@id="key"]').send_keys(a)

3.解析頁面

 # 解析頁面
    def parse_html(self):
        # 把下拉菜單拉到底部,執行JS腳本
        self.browser.execute_script('window.scrollTo(0,document.body.scrollHeight)')
        time.sleep(2)
        # 提取所有商品節點對象列表 li列表
        li_list = self.browser.find_elements_by_xpath('//*[@id="J_goodsList"]/ul/li')

結果展示

4.創建csv,寫入header

  # 創建csv
        fp = open('京東商品信息爬取.csv', 'wt', newline='', encoding='utf-8')

        # 寫入header
        writer = csv.writer(fp)
        writer.writerow(('價格', '評價', '出版社', '商品信息',))
        for li in li_list:
            info_list = li.text.split('\n')
            if info_list[0].startswith('每滿') or info_list[1].startswith('¥'):
                price = info_list[1]
                name = info_list[2]
                comment = info_list[3]
                shop = info_list[4]
            elif info_list[0].startswith('單件'):
                price = info_list[3]
                name = info_list[4]
                comment = info_list[5]
                shop = info_list[6]
            else:
                price = info_list[0]
                name = info_list[1]
                comment = info_list[2]
                shop = info_list[3]
            writer.writerow((price, comment, shop, name))

            print(price, comment, shop, name)

結果展示

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章