说明
看完用selenium爬取淘宝商品信息的网课,于是乎想着自己也整一个selenium程序来爬取京东以作巩固。写了几个小时的代码,通过不断调试,学到了很多细节上的处理,完整代码在下方,使用时修改搜索的参数就可以开始爬取了,事先要安装goole chrome的驱动。最终爬取的结果存储在了products数组中,需要添加其他处理时,直接在程序最后使用数组来调用爬取的结果。运行结果不展示了,就是把信息输出出来,因为要等待网页加载,所以运行时间有点久。
完整代码
from selenium import webdriver
import time
def Search_Product(key): #向搜索框输入内容
driver.find_element_by_id('key').send_keys(key)
def Click_Search(): #搜索按钮
driver.find_element_by_class_name('button').click()
def PageNum(): #获取总的页数
pagenum=driver.find_element_by_class_name('p-skip').text
return pagenum[1:-10]
def Page_Next(): #下一页
page=driver.find_element_by_class_name('pn-next')
page.click()
if __name__=='__main__':
products=[]
count=0
url="http://www.jingdong.com/"
driver=webdriver.Chrome()
driver.get(url)
Search_Product('特仑苏')
driver.maximize_window()
Click_Search()
time.sleep(3) #进程挂起3秒,等待窗口加载完成,未加载完成会导致爬取的数据不全,或者元素无法定位
driver.execute_script("window.scrollBy(0, 8000)") #下拉滚动条以使网页中的全部商品信息加载,不下拉进度条,下半部分信息不显示
time.sleep(1)
while(count<int(PageNum())):
products_info=driver.find_elements_by_xpath('//div[@class = "gl-i-wrap"]')
for div in products_info:
name=div.find_element_by_xpath('.//div[@class="p-name p-name-type-2"]') #商品名称
price=div.find_element_by_xpath('.//div[@class="p-price"]//i') #价格
shop=div.find_element_by_xpath('.//div[@class="p-shop"]') #店铺名称
commit=div.find_element_by_xpath('.//div[@class="p-commit"]//a') #评价
products.append((name.text,price.text+'元',shop.text,commit.text+'评论'))
pagenum=count+1
print('第'+str(pagenum)+'页已提取,共'+PageNum()+'页')
Page_Next()
time.sleep(3)
driver.execute_script("window.scrollBy(0, 8000)")
time.sleep(1)
count+=1
driver.quit()
print(products)