使用selenium爬取唯品会

  • 1、基本步骤
  • 2、通过程序控制浏览器下拉滚动条获取加载信息
  • 3、完成这个爬虫程序

使用selenium爬取动态加载的网页,爬取唯品会的商品

1、基本步骤

首先,创建一个浏览器驱动driver,查看唯品会页面url的变化规则,确定url,这里的url可以接受中文关键字

然后就是爬虫的三大步骤:数据抓取,数据解析,数据存储
theVip .py

from selenium import webdriver
from lxml import etree
import re
import csv
from time import sleep## 1. 数据抓取def fetch_page(goods,url,start,end,driver):for page in range(start,end+1):page_url = url%(goods,page)print('正在访问页面:',page_url)driver.get(page_url)sleep(1)html = driver.page_sourceprint(html)## 2. 数据解析## 3. 数据存储if __name__ == '__main__':# 创建一个浏览器驱动driver = webdriver.Chrome(executable_path=r'C:\mydownload\chromedriver.exe')# 需要变动的是搜索的关键字和页码数url ='https://category.vip.com/suggest.php?keyword=%s&page=%d'goods = input('请输入您要抓取的商品名:')start = int(input('请输入起始页:'))end = int(input('请输入终止页:'))fetch_page(goods=goods,url=url,start=start,end=end,driver=driver)

运行这个.py文件,**print(html)**可以打印相关的页面信息
然而,该程序有需要改善的地方,就是打开浏览器不会自行关闭,因为driver是一个全局变量,不会自行销毁,这里可以把它变成一个局部变量,这样,获取完相应的内容后,浏览器就会自动关闭
把浏览器驱动创建在函数内部,可以随着函数调用的结束而退出,从而节省内存开销
theVip2 .py

from selenium import webdriver
from lxml import etree
import re
import csv
from time import sleep
# 1、【数据抓取】
def fetch_pages(goods,url,start,end):driver = webdriver.Chrome(executable_path=r"C:\Users\fanjianbo\Desktop\chromedriver_win32\chromedriver.exe") # 把浏览器驱动创建在函数内部,可以随着函数调用的结束而退出for page in range(start,end+1):# 拼接urlpage_url = url%(goods,page)print("正在访问页面:",page_url)driver.get(page_url)sleep(1)html = driver.page_sourceprint(html)# 2、【数据解析】# 3、【数据存储】if __name__ == '__main__':# 创建一个浏览器驱动url = "https://category.vip.com/suggest.php?keyword=%s&page=%d"goods = input("请输入您要抓取的商品名:")start = int(input("请输入起始页:"))end = int(input("请输入终止页:"))fetch_pages(goods=goods,url=url,start=start,end=end)

然而,现在虽然能获取页面,但却还是不能完全获取我们想要的信息,因为这里的页面是动态加载的,通过下拉滚动条才能加载下拉的信息,这里简单介绍一些如何下拉滚动条来获取信息

2、通过程序控制浏览器下拉滚动条获取加载信息

selenium 中没有原生方法可以支持滚动
如果要滚动必须用js来操作

这里以头条为例
theRollback .py

from selenium import webdriver
from time import  sleep# 创建一个浏览器驱动
driver = webdriver.Chrome(executable_path=r'C:\mydownload\chromedriver.exe')url = 'https://www.toutiao.com/'driver.get(url=url)
sleep(3)
# # 滚动条向下滚动  距离顶部100
# js = 'document.documentElement.scrollTop=100'
#
# # 用浏览器驱动来执行js语句
# driver.execute_script(js)# 模拟人类的动作,需要一点点滚动,否则,如果滚动过快,后台就会拒绝刷新
for i in range(100):# 滚动100次,每次滚动100,每隔2s滚动一次distance = i*100# 这个js语句代表滚动条距离顶部的距离js = 'document.documentElement.scrollTop=%d'%distancedriver.execute_script(js)sleep(2)

3、完成这个爬虫程序

首先浏览器去头
通过xpath对页面进行数据解析
最后写入csv文件

from selenium import webdriver
from lxml import etree
import re
import csv
from time import sleep## 1. 数据抓取def fetch_page(goods, url, start, end):# 抓取数据成功后 浏览器去头opt = webdriver.ChromeOptions()opt.add_argument("--headless")opt.add_argument("--disable-gpu")# 创建一个浏览器驱动driver = webdriver.Chrome(executable_path=r'C:\mydownload\chromedriver.exe',options=opt)for page in range(start, end + 1):page_url = url % (goods, page)print('正在访问页面:', page_url)driver.get(page_url)sleep(1)# 下拉刷新# 模拟人类的动作,需要一点点滚动,否则,如果滚动过快,后台就会拒绝刷新for i in range(12):# 滚动100次,每次滚动100,每隔2s滚动一次distance = i * 500# 这个js语句代表滚动条距离顶部的距离js = 'document.documentElement.scrollTop=%d' % distanceprint('第%d页正在进行%d次的刷新'%(page,i+1))driver.execute_script(js)sleep(1)# 获取html字符串html = driver.page_source# print(html)yield html## 2. 数据解析
def analysis_data(data):for page in data:html_tree = etree.HTML(page)# 提取所有的商品goods_list = html_tree.xpath("//div[starts-with(@class,'goods-list-item')]")print(goods_list)# 遍历每个页面中的所有商品for goods in goods_list:item = {}item["title"] = "".join(goods.xpath(".//h4/a//text()")[1:])# 由于页面上的商品价格有两种即:疯抢商品和非疯抢商品,他们的价格的解析方式不同,在这里首先要判断商品是否疯抢special = goods.xpath(".//div[starts-with(@class,'special-price')]//span[@class='title']/text()")# print(special)if len(special) != 0:# 说明是疯抢商品item["specialPrice"] = special[0]item["c-price"] = \re.findall(pattern=r"[0-9]+", string=goods.xpath(".//del[@class='c-price']/text()")[0])[0]item["special"] = 1else:# 不是疯抢商品item["special"] = 0item["sellPrice"] = goods.xpath(".//em//span[@class='price']/text()")[0]# 判断商品有没有打折(即又有市场价和卖价)marketPrice = goods.xpath(".//del[starts-with(@class,'goods-small-price')]//text()")print(marketPrice)if len(marketPrice) == 2:item["marketPrice"] = marketPrice[1]yield item## 3. 数据存储
def writer_to_csv(goods_list):fp=open('vip.csv','a+',newline='')writer = csv.writer(fp)writer.writerow(['special','title','specialPrice','cPrice','sellPrice','marketPrice'])for goods in goods_list:row = []row.append(goods["special"])row.append(goods["title"])row.append(goods.get("specialPrice"))row.append(goods.get("c-price"))row.append(goods.get("sellPrice"))row.append(goods.get("marketPrice"))# print(row)writer.writerow(row)if __name__ == '__main__':# 需要变动的是搜索的关键字和页码数url = 'https://category.vip.com/suggest.php?keyword=%s&page=%d'goods = input('请输入您要抓取的商品名:')start = int(input('请输入起始页:'))end = int(input('请输入终止页:'))pages = fetch_page(goods=goods, url=url, start=start, end=end)good_list = analysis_data(pages)writer_to_csv(good_list)

使用selenium爬取唯品会相关推荐

  1. 爬虫之selenium爬取斗鱼网站

    爬虫之selenium爬取斗鱼网站 示例代码: from selenium import webdriver import timeclass Douyu(object):def __init__(s ...

  2. Php使用selenium爬虫,selenium,python爬虫_使用selenium爬取网站时输出结果不正确,selenium,python爬虫 - phpStudy...

    使用selenium爬取网站时输出结果不正确 网站链接:http://www.ncbi.nlm.nih.gov/pubmed?term=(%222013%22%5BDate%20-%20Publica ...

  3. [Python3网络爬虫开发实战] 7-动态渲染页面爬取-4-使用Selenium爬取淘宝商品

    在前一章中,我们已经成功尝试分析Ajax来抓取相关数据,但是并不是所有页面都可以通过分析Ajax来完成抓取.比如,淘宝,它的整个页面数据确实也是通过Ajax获取的,但是这些Ajax接口参数比较复杂,可 ...

  4. 利用Selenium爬取淘宝商品信息

    文章来源:公众号-智能化IT系统. 一.  Selenium和PhantomJS介绍 Selenium是一个用于Web应用程序测试的工具,Selenium直接运行在浏览器中,就像真正的用户在操作一样. ...

  5. [python爬虫] selenium爬取局部动态刷新网站(URL始终固定)

    在爬取网站过程中,通常会遇到局部动态刷新情况,当你点击"下一页"或某一页时,它的数据就进行刷新,但其顶部的URL始终不变.这种局部动态刷新的网站,怎么爬取数据呢?某网站数据显示如下 ...

  6. [python爬虫] Selenium爬取内容并存储至MySQL数据库

    前面我通过一篇文章讲述了如何爬取CSDN的博客摘要等信息.通常,在使用Selenium爬虫爬取数据后,需要存储在TXT文本中,但是这是很难进行数据处理和数据分析的.这篇文章主要讲述通过Selenium ...

  7. python爬取网易云歌单_详解python selenium 爬取网易云音乐歌单名

    目标网站: 首先获取第一页的数据,这里关键要切换到iframe里 打印一下 获取剩下的页数,这里在点击下一页之前需要设置一个延迟,不然会报错. 结果: 一共37页,爬取完毕后关闭浏览器 完整代码: u ...

  8. layui获取input信息_python爬虫—用selenium爬取京东商品信息

    python爬虫--用selenium爬取京东商品信息 1.先附上效果图(我偷懒只爬了4页) 2.京东的网址https://www.jd.com/ 3.我这里是不加载图片,加快爬取速度,也可以用Hea ...

  9. Python之网络爬虫(selenium爬取动态网页、爬虫案例分析、哈希算法与RSA加密)

    文章目录 一.selenium爬取动态网页 二.爬虫案例分析 三.哈希hash算法与RSA加密 一.selenium爬取动态网页 1.动态网页认知 爬虫其实就是在模仿浏览器的行为 应对要多次数据的交互 ...

最新文章

  1. Windows 11 用户“怒了” :微软发推炫耀 3D 海龟表情包引争议
  2. 信用评分卡—信贷准入A卡(逻辑回归)
  3. 解决Maven管理项目update Maven时,jre自动变为1.5
  4. 奇异值分解(SVD)原理与在降维中的应用
  5. React开发(213):React在 DevTools 中显示自定义名称
  6. mfc指示灯报警显示_常用汽车仪表指示灯大全,看完再也不用担心不认识了
  7. python前端调用后端模型_前端调用后端的方法(基于restful接口的mvc架构)
  8. Linux学习笔记(PATH,cp,mv,文档查看cat/more/less/head/tail)
  9. 微型计算机的输入 输出设备PPT,(微型计算机系统模型).ppt
  10. 总线接口与计算机通信(三)UART起止式异步通用串行数据总线
  11. Python动态页面抓取超级指南
  12. 【使用教程】面向回家编程-12306智能刷票,订票
  13. 风格迁移篇--CCPL:Contrastive Coherence Preserving Loss for Versatile Style Transfer多功能风格转换的对比连贯保持损失
  14. marlab中主成分得分怎么求_雅漾恒润保湿精华乳,做完配方成分解读,我表示遗憾,决定守住我的花呗...
  15. 拼多多优惠券BUG事件完整回顾
  16. emacs python_将Emacs打造成强大的Python代码编辑工具
  17. 《乱世佳人》读书笔记及相关感悟3900字
  18. 猜数字(超级简单题目)
  19. 侧边栏如何展开与收起
  20. C# 里弹出“确定”“取消”对话框

热门文章

  1. Spectral Algorithm
  2. table 表格如何设置单元格固定长度
  3. hive报错Could not get block locations. Source file “/user/hive/warehouse/xxx
  4. phx.gen.html 生成器
  5. 玩了下朋友刚买的iphone4s,太鸡冻了,太幸福了
  6. Mining Spatio-Temporal Reachable Regions over Massive Trajectory Data
  7. IP电话系统和VoIP系统使用指南
  8. php实现短信找回密码,thinkphp5怎么调用云片接口实现发送短信验证码找回密码功能...
  9. 51单片机学习笔记——STC15W201S系列
  10. 万元怎样保留小数点_如何让数字以万元为单位显示并保留2位小数,且有千位分隔符...