小白学爬虫,费了一番功夫终于成功了哈哈!本文将结合本人踩雷经历,分享给各位学友~

一、导包

import time

import csv

from selenium import webdriver

二、创建csv文件

用写入方式打开名为data的csv文件,并确定将要提取的五项数据。

f = open('data.csv',mode = 'w',encoding ='utf-8',newline = '')

#将表头信息写入文件

csv_writer = csv.DictWriter(f,fieldnames = ['标题','价格','评论','店名','详情页'])

csv_writer.writeheader()

三、搜索商品页并加载数据

#实例化浏览器对象

driver = webdriver.Edge('C:\Windows\SystemApps\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\msedgedriver.exe')

#访问京东网址

driver.get('https://www.jd.com/')

#定位搜索框,并输入查找内容‘七夕’

driver.find_element_by_id('key').send_keys('七夕')

#点击搜索按钮

driver.find_element_by_class_name('button').click()

#等待界面数据加载

driver.implicitly_wait(10)

#有些网页是鼠标一边下移一边加载,该函数使页面数据全部加载

def drop_down():

for x in range(1,12,2):

time.sleep(1)

j = x / 9

# document.documetnElement,scrollTop 指定滚动条的位置

# document.documentElement.scrollHeight 获取浏览器页面的最大高度

js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % j

driver.execute_script(js)

上面第一行代码值得一提,driver =  webdriver.Edge()括号内为Edge浏览器驱动程序地址,需要在Edge浏览器设置中查找Edge浏览器版本,并下载对应版本的驱动程序,具体操作如下:

1.在设置中找到Edge浏览器对应版本

2.下载驱动程序

驱动路径来源(读者需自行替换):

Step1:根据官网提供网址 Microsoft Edge WebDriver - Microsoft Edge Developer

找到和自己Edge浏览器版本一致的驱动程序。这里等待时间稍微有点长,请耐心等待。

Step2:将安装包解压到不包含中文的路径下,获得msedgedriver.exe文件

Step3:将完整路径填入到driver = webdriver.Edge()括号内,注意路径需包含\msedgedriver.exe

第三行代码定位搜索框的流程也介绍一下:

首先,打开京东,在空白处右击,单击“检查”,弹出框图如下

 单击弹出框框左上角的标识,并将鼠标放在搜索框中,再单击一下固定位置,找到对应代码。

 找到其中的id为‘key’,可根据该项特征定位搜索框。第四行代码定位搜索按钮采取相同方式定位,不同的是搜索按钮根据类名定位,找到class = “……”中的内容即可。

 

四、获取多页数据并逐行写入csv文件

#提取第1~7页的内容

for page in range(1,7):

#调用函数

drop_down()

#获取所有商品对应标签(列表),注意此处是elements而不是element

lis = driver.find_elements_by_css_selector('.gl-item')

#print(lis)

#将列表元素一个个拿出来

for li in lis:

title = li.find_element_by_css_selector('.p-name em').text.replace('\n','')

price = li.find_element_by_css_selector('.p-price strong i').text

comment = li.find_element_by_css_selector('.p-commit strong').text

shop = li.find_element_by_css_selector('.p-shop span a').text

link = li.find_element_by_css_selector('.p-img a').get_attribute('href')

dit = {

'标题':title,

'价格':price,

'评论':comment,

'店名':shop,

'详情页':link

}

#写入csv

csv_writer.writerow(dit)

#及时刷新缓冲区

f.flush()

print(dit)

#点击下一页按钮

driver.find_element_by_class_name('pn-next').click()

发现出现了find_element_by_css_selector('……'),那省略号的内容又该在哪儿找呢?我们以代码lis = driver.find_elements_by_css_selector('.gl-item')为例说明一下。

在首页搜索“七夕”,得到商品页。

同样右击,单击“检查”,单击弹出框左上角标识,把鼠标移动到商品上(要全部框选),单击一下固定代码位置 ,再查看右侧框中选项。

 虽然含有 .goods-list-v2 和 .gl-item 两项,然而,.gl-item足以标记所有商品,故省略号仅填.gl-item即可。

五、代码汇总

import time

import csv

from selenium import webdriver

f = open('data.csv',mode = 'w',encoding ='utf-8',newline = '')

#将表头信息写入文件

csv_writer = csv.DictWriter(f,fieldnames = ['标题','价格','评论','店名','详情页'])

csv_writer.writeheader()

#实例化浏览器对象(第一句需要修改,具体方法见上文)

driver = webdriver.Edge('C:\Windows\SystemApps\Microsoft.MicrosoftEdge_8wekyb3d8bbwe\msedgedriver.exe')

#访问京东网址

driver.get('https://www.jd.com/')

#定位搜索框,并输入查找内容‘七夕’

driver.find_element_by_id('key').send_keys('七夕')

#点击搜索按钮

driver.find_element_by_class_name('button').click()

#等待界面数据加载

driver.implicitly_wait(10)

#有些网页是鼠标一边下移一边加载,该函数使页面数据全部加载

def drop_down():

for x in range(1,12,2):

time.sleep(1)

j = x / 9

# document.documetnElement,scrollTop 指定滚动条的位置

# document.documentElement.scrollHeight 获取浏览器页面的最大高度

js = 'document.documentElement.scrollTop = document.documentElement.scrollHeight * %f' % j

driver.execute_script(js)

#提取第1~7页的内容

for page in range(1,7):

#调用函数

drop_down()

#获取所有商品对应标签(列表),注意此处是elements而不是element

lis = driver.find_elements_by_css_selector('.gl-item')

#print(lis)

#将列表元素一个个拿出来

for li in lis:

title = li.find_element_by_css_selector('.p-name em').text.replace('\n','')

price = li.find_element_by_css_selector('.p-price strong i').text

comment = li.find_element_by_css_selector('.p-commit strong').text

shop = li.find_element_by_css_selector('.p-shop span a').text

link = li.find_element_by_css_selector('.p-img a').get_attribute('href')

dit = {

'标题':title,

'价格':price,

'评论':comment,

'店名':shop,

'详情页':link

}

#写入csv

csv_writer.writerow(dit)

#及时刷新缓冲区

f.flush()

print(dit)

#点击下一页按钮

driver.find_element_by_class_name('pn-next').click()

 感谢读者大大读到此处~学习辛苦啦!

精彩文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: