【爬虫】python使用selenium抓取淘宝中的商品数据

前言

最近因为项目需要又得抓一批数据,和之前的scrapy不同,这次选择使用selenium来爬取。两种方法的区别如下:

  • scrapy之类的库是基于网络请求来爬取的,也就是直接向目标服务器发送http请求,在这个过程中需要自己构造请求字段也就是json格式的request body。
  • selenium一类的库是基于自动化测试的,我们只需要知道想要访问的链接就好,其它的(异步加载图片、信息之类的)交给浏览器来做。也因此在使用时需要额外下载浏览器以及对应驱动,比如googledriver。

总而言之,虽然selenium在速度上是远远不如直接发请求的scrapy一类的库的,但可以完美地规避反爬策略,因为自动化测试相当于是模拟人去访问一个网站,因此还可以进行网页自动截图之类的操作,可以说是非常简单方便。

安装

  1. 下载selenium库:pip install selenium
  2. 下载浏览器驱动:一般来说就是ChromeDriver,先看自己电脑上的Chrome版本,然后在给出的链接中下载对应版本的ChromeDriver。
  3. 将ChromeDriver加到环境变量里,方法就不多说了,网上随便找找就有,可以参考[windows环境变量配置/linux、mac环境变量配置]

对网页进行滚动截屏

首先是一个比较简单的应用,就是对整个网页进行截屏,并且在网页长度超出窗口长度时可以滚动截屏并自动拼接。主要思想是获取网页长度page_height与窗口长度window_height,然后循环定位到网页的不同位置来截图,并把截图都拼接到一起。话不多说直接上代码:

from io import BytesIO
import traceback
from time import sleep
from PIL import Image
import numpy as np
from selenium import webdriver

def url_screenshot(ad_url, index):
    try:
        chrome_options = webdriver.ChromeOptions()
        chrome_options.add_experimental_option("excludeSwitches", ['enable-automation'])
        chrome_options.add_argument('--headless')	# 后台静默运行
        driver = webdriver.Chrome(options=chrome_options)
        driver.get(ad_url)
        driver.fullscreen_window()  # 全屏窗口
        # 当前窗口的高度
        window_height = driver.get_window_size()['height']  
        # 页面高度
        page_height = driver.execute_script('return document.documentElement.scrollHeight')  
        print('window_height:{},page_height:{}'.format(window_height,page_height)
        img_binary = driver.get_screenshot_as_png()
        base_img = np.array(Image.open(BytesIO(img_binary)))

        if page_height > window_height:
            n = page_height // window_height  # 需要滚动的次数
            for i in range(n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值