内容 采集 软件(准备工作驱动安装实现案例之前,我们要先安装一个谷歌驱动 )

优采云 发布时间: 2022-03-11 19:15

  内容 采集 软件(准备工作驱动安装实现案例之前,我们要先安装一个谷歌驱动

)

  准备安装驱动程序

  在实现案例之前,我们需要安装一个谷歌驱动,因为我们使用selenium来控制谷歌驱动,然后控制浏览器实现自动操作,模拟人类行为来操作浏览器。

  以谷歌浏览器为例,打开浏览器看到我们自己的版本,然后下载与你的浏览器版本相同或最相似的版本,下载后解压,将解压后的插件放到我们的python环境中,或者你可以也把它和代码放在一起。

  模块使用及介绍流程分析

  我们访问一个网站并输入一个URL,所以代码是这样写的。

  首先导入模块

  from selenium import webdriver

  不要将文件名或包名命名为selenium,否则会导致导入失败。

  Webdriver可以被认为是浏览器的驱动程序。要驱动浏览器,必须使用支持多种浏览器的webdriver。

  实例化浏览器对象,我这里用的是google,建议大家用google,比较方便。

  driver = webdriver.Chrome()

  我们使用 get 访问一个 URL,它会自动打开该 URL。

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

  运行

  

  打开网站后,以购买口红为例。

  我们首先需要通过您要购买的产品的关键字搜索产品信息,并利用搜索结果获取信息。

  

  然后我们还要写一个输入,在空白处右击选择Check。

  选择元素元素面板

  

  用鼠标单击左侧的箭头按钮以单击搜索框,它将直接导航到搜索选项卡。

  

  右键单击标签,选择复制,选择复制选择器。

  

  如果你是 xpath,复制它的 xpath。

  然后写下我们要搜索的内容

  driver.find_element_by_css_selector('#key').send_keys('口红')

  再次运行时会自动打开浏览器,输入目标网址搜索口红。

  

  同样的方法,找到搜索按钮并点击它。

  driver.find_element_by_css_selector('.button').click()

  再次运行它,它会自动点击搜索。

  页面被搜索到了,那么我们在正常浏览网页的时候需要把页面拉下来,对了,我们让它自动拉下来吧。

  先导入时间模块

  import time

  执行页面滚动操作

  def drop_down():

"""执行页面滚动的操作""" # javascript

for x in range(1, 12, 2): # for循环下拉次数,取1 3 5 7 9 11, 在你不断的下拉过程中, 页面高度也会变的;

time.sleep(1)

j = x / 9 # 1/9 3/9 5/9 9/9

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

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

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

driver.execute_script(js) # 执行我们JS代码

  循环被编写,然后被调用。

  drop_down()

  

  让我们再推迟一次

  driver.implicitly_wait(10)

  这是一个隐式等待,等待网页延迟,如果网络不好加载会很慢。

  隐式等待不必等待十秒钟。您的网络在十秒内加载完毕后,随时会被加载。如果十秒后没有加载,就会强制加载。

  还有另一种死亡等待。你写完后要等几秒,这样比较不人性化。

  time.sleep(10)

  加载完数据后,我们需要找到商品数据的来源

  价格/标题/评论/封面/商店等。

  或者右键查看,在element中,点击小箭头,点击要查看的数据。

  可以看到都在li标签里面

  

  获取所有的li标签内容,还是一样的,直接复制。

  

  在左下角

  

  这是第一个要取的,但是我们要获取所有的标签,所以左边框中li之后的可以删除。

  

  如果没有,可以看到这里有60条商品数据,每页60条。

  

  所以我们复制其余的并用 lis 接收它。

  lis = driver.find_elements_by_css_selector('#J_goodsList ul li')

  因为我们获取的是所有的label数据,所以比之前多了一个s

  

  打印它

  print(lis)

  通过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 # 价格

commit = li.find_element_by_css_selector('.p-commit strong a').text # 评论量

shop_name = li.find_element_by_css_selector('.J_im_icon a').text # 店铺名字

href = li.find_element_by_css_selector('.p-img a').get_attribute('href') # 商品详情页

icons = li.find_elements_by_css_selector('.p-icons i')

icon = ','.join([i.text for i in icons]) # 列表推导式 ','.join 以逗号把列表中的元素拼接成一个字符串数据

dit = {

'商品标题': title,

'商品价格': price,

'评论量': commit,

'店铺名字': shop_name,

'标签': icon,

'商品详情页': href,

}

csv_writer.writerow(dit)

print(title, price, commit, href, icon, sep=' | ')

  搜索功能

  key_world = input('请输入你想要获取商品数据: ')

  

  待采集的数据,采集后保存为CSV

  f = open(f'京东{key_world}商品数据.csv', mode='a', encoding='utf-8', newline='')

csv_writer = csv.DictWriter(f, fieldnames=[

'商品标题',

'商品价格',

'评论量',

'店铺名字',

'标签',

'商品详情页',

])

csv_writer.writeheader()

  然后写一个自动翻页

  for page in range(1, 11):

print(f'正在爬取第{page}页的数据内容')

time.sleep(1)

drop_down()

get_shop_info() # 下载数据

driver.find_element_by_css_selector('.pn-next').click() # 点击下一页

  视频教程

  后面就不写那么详细了,只是发了点东西,大家可以点击下面直接看视频

  Python + selenium采集京东商品数据,保存Excel

  完整代码

  from selenium import webdriver

import time

import csv

def drop_down():

"""执行页面滚动的操作"""

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

time.sleep(1)

j = x / 9 # 1/9 3/9 5/9 9/9

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

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

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

driver.execute_script(js) # 执行JS代码

key_world = input('请输入你想要获取商品数据: ')

f = open(f'京东{key_world}商品数据.csv', mode='a', encoding='utf-8', newline='')

csv_writer = csv.DictWriter(f, fieldnames=[

'商品标题',

'商品价格',

'评论量',

'店铺名字',

'标签',

'商品详情页',

])

csv_writer.writeheader()

# 实例化一个浏览器对象

driver = webdriver.Chrome()

driver.get('https://www.jd.com/') # 访问一个网址 打开浏览器 打开网址

# 通过css语法在element(元素面板)里面查找 #key 某个标签数据 输入一个关键词 口红

driver.find_element_by_css_selector('#key').send_keys(key_world) # 找到输入框标签

driver.find_element_by_css_selector('.button').click() # 找到搜索按钮 进行点击

# time.sleep(10) # 等待

# driver.implicitly_wait(10) # 隐式等待

def get_shop_info():

# 第一步 获取所有的li标签内容

driver.implicitly_wait(10)

lis = driver.find_elements_by_css_selector('#J_goodsList ul li') # 获取多个标签

# 返回数据 列表 [] 列表里面的元素 对象

# print(len(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 # 价格

commit = li.find_element_by_css_selector('.p-commit strong a').text # 评论量

shop_name = li.find_element_by_css_selector('.J_im_icon a').text # 店铺名字

href = li.find_element_by_css_selector('.p-img a').get_attribute('href') # 商品详情页

icons = li.find_elements_by_css_selector('.p-icons i')

icon = ','.join([i.text for i in icons]) # 列表推导式 ','.join 以逗号把列表中的元素拼接成一个字符串数据

dit = {

'商品标题': title,

'商品价格': price,

'评论量': commit,

'店铺名字': shop_name,

'标签': icon,

'商品详情页': href,

}

csv_writer.writerow(dit)

print(title, price, commit, href, icon, sep=' | ')

# print(href)

for page in range(1, 11):

print(f'正在爬取第{page}页的数据内容')

time.sleep(1)

drop_down()

get_shop_info() # 下载数据

driver.find_element_by_css_selector('.pn-next').click() # 点击下一页

driver.quit() # 关闭浏览器

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线