生活随笔
收集整理的這篇文章主要介紹了
爬虫实战:使用Selenium爬取京东宝贝信息
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
有些頁面數據是采用Ajax獲取的,但是這些Ajax接口參數比較復雜,可能會加入加密秘鑰。對于這種頁面,最方便的方法是通過selenium。可以用Selenium來模擬瀏覽器操作,抓取京東商品信息。 網頁分析
今天用Selenium模擬瀏覽器來爬取信息。
輸入框id為q
在Chrome瀏覽器中,選擇搜索按鈕,審查元素,找到搜索按鈕所在位置,右鍵,選擇copy,選擇copy seletor 即可選擇搜索按鈕的css 本次選擇結果為#search > div > div.form > button
輸入寶貝名字:如內衣 然后網頁拉到頁末 同理找到頁末100頁的css路徑 #J_bottomPage > span.p-skip > em:nth-child(1) > b
如圖發現,每個商品都是一個Li標簽。提取li標簽css路徑(ul包含所有商品) css路徑為#J_goodsList > ul > li
driver
. find_elements_by_css_selector
( '#J_goodsList > ul > li' )
得到的是 li:nth-child(1), li:nth-child(2)…
提取商品信息如提取名字,選擇某一商品的名字得到的css路徑為 #J_goodsList > ul > li:nth-child(1) > div > div.p-name.p-name-type-2 > a > em 我們應修改為div > div.p-name.p-name-type-2 > a > em
from selenium
import webdriver
import time
import csv
import re
def search_product ( key
) : driver
. find_element_by_id
( 'key' ) . send_keys
( key
) driver
. find_element_by_css_selector
( '#search > div > div.form > button' ) . click
( ) driver
. maximize_window
( ) time
. sleep
( 3 ) page
= driver
. find_element_by_css_selector
( '#J_bottomPage > span.p-skip > em:nth-child(1) > b' ) . textpage
= re
. findall
( '(\d+)' , page
) [ 0 ] return int ( page
)
def get_product ( ) : lis
= driver
. find_elements_by_css_selector
( '#J_goodsList > ul > li' ) for li
in lis
: info
= li
. find_element_by_xpath
( 'div/div[4]/a/em' ) . textprice
= li
. find_element_by_css_selector
( 'div > div.p-price > strong > i' ) . text
+ "元" evaluate
= li
. find_element_by_css_selector
( 'div > div.p-commit > strong' ) . textname
= li
. find_element_by_css_selector
( 'div > div.p-shop > span > a' ) . textphoto
= li
. find_element_by_css_selector
( 'div > div.p-img > a > img' ) . get_attribute
( 'src' ) print ( info
, price
, evaluate
, name
, photo
, sep
= '|' ) with open ( '京東商品.csv' , 'a' , newline
= "" ) as fp
: csvwriter
= csv
. writer
( fp
, delimiter
= ',' ) csvwriter
. writerow
( [ info
, price
, evaluate
, name
, photo
] ) def main ( ) : print ( '正在爬取第一頁數據' ) page
= search_product
( keyword
) get_product
( ) page_num
= 1 while page_num
!= page
: print ( '-*-' * 10 ) print ( '正在爬取第{}頁的數據' . format ( page_num
+ 1 ) ) print ( '*-*' * 10 ) driver
. get
( 'https://search.jd.com/Search?keyword={}&wq={}&page={}&s=116&click=0' . format ( keyword
, keyword
, page_num
) ) driver
. implicitly_wait
( 2 ) driver
. maximize_window
( ) get_product
( ) page_num
+= 1 if __name__
== '__main__' : keyword
= input ( "請輸入你要商品的關鍵字:" ) path
= 'D:\chromedriver_win32\chromedriver.exe' driver
= webdriver
. Chrome
( path
) driver
. get
( 'https://www.jd.com/?cu=true&utm_source=c.duomai.com&utm_medium=tuiguang&utm_campaign=t_16282_137005883&utm_term=5b4355c849464534ae6a958b61187471' ) main
( )
換一種商品試試
我們可以抓取京東上的所有商品
總結
以上是生活随笔 為你收集整理的爬虫实战:使用Selenium爬取京东宝贝信息 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。