selenium自动化爬取gif图片

今天要爬取的是笔画网站的动态图片
网址:http://bishun.strokeorder.info/
打开网页如图
在这里插入图片描述
老规矩F12一下看看:
在这里插入图片描述
我们想要的是中间这个正在动的“云”字。左上角的小箭头点一下,网页上指哪儿看哪儿。如红框所示,文件就是一个gif的图片。这个爬取就好爬了。

爬取思路

1、selenium库执行自动化打开网页,进行自动化搜索。
2、连接数据库,实现所有文字的循环搜索。
3、使用xpath定位gif文件,获取文件名“title”和图片网页地址“src”。
4、存储文件至指定文件。

按照思路写代码
1,selenium库执行自动化打开网页,进行自动化搜索
导入相关的包

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
#创建WebDriver对象
driver = webdriver.Chrome()
#等待变量
driver.get("http://bishun.strokeorder.info/")
#等待“搜索按钮加载完成”
search_btn = driver.find_element_by_xpath("//*[@id='search']/form/input[1]")
#在搜索框输入要查询的字
search_btn.send_keys(wname)
#等待确认按钮加载完成
confirm_btn = wait.until(
    EC.element_to_be_clickable((By.CSS_SELECTOR,'#search > form > input.button'))
)
#单击“确认”按钮
confirm_btn.click()
#等待5秒
time.sleep(5)

按钮加载,也就是代码中的’#search > form > input.button’是这样获得的。
在这里插入图片描述

在这里插入图片描述
对于定位到的的字段进行copy,选择copy selector。粘贴过来就是了。
2、连接数据库,实现所有文字的循环搜索

#连接数据库
conn = pymysql.connect("localhost","root","123456","test")
cursor = conn.cursor()
sql = "select wname from test_word"
cursor.execute(sql)
results = cursor.fetchall()

results为所有查询到的内容数组。之后使用for循环遍历数组将遍历内容作为参数传入1中即可完成自动化搜索。
3、使用xpath定位gif文件,获取文件名“title”和图片网页地址“src”
使用xpath必须对html页面进行处理。即记性初始化。不然会报错str/type类型无法使用xpath模块

#获取当前页面的url
url = driver.current_url
#处理html页面
rq = requests.get(url)
rq.emcoding = chardet.detect(rq.content)['encoding']
print(rq.status_code)
html = rq.content.decode('utf-8')
html = etree.HTML(html, parser=etree.HTMLParser(encoding='utf-8'))
#获取文件名和文件链接
PictureList = html.xpath('/html/body/div[1]/img/@src')
Picture = PictureList[0]
NameList = html.xpath('/html/body/div[1]/img/@alt')
Name = NameList[0]

4、存储文件至指定文件

 # 设置存储位置
root = r'E:\strokes\\'#指定文件目录
path = root + name + '.gif'
try:
	if not os.path.exists(root):
		os.mkdir(root)			#判断是否有该目录,没有就创建一个
	if not os.path.exists(path):
		print(url)
			r = requests.get(url)
            print(r)
            with open(path, 'wb') as f:
            f.write(r.content)		#将文件以二进制的方式存储下来
            f.close()
            print("文件保存成功")
    else:
            print("文件已存在")
except:
	print("爬取失败")

1、2、3、4进行组合
完整代码

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import time
import requests
import pymysql
import chardet
from lxml import etree
import os
#创建WebDriver对象
driver = webdriver.Chrome()
#等待变量
wait = WebDriverWait(driver,10)
#连接数据库
conn = pymysql.connect("localhost","root","123456","test")
cursor = conn.cursor()
sql = "select wname from test_word"
cursor.execute(sql)
results = cursor.fetchall()
#自动搜索汉字及页面处理
def Search(wname):
    driver.get("http://bishun.strokeorder.info/")
    #等待“搜索按钮加载完成”
    search_btn = driver.find_element_by_xpath("//*[@id='search']/form/input[1]")#//*[@id="search"]/form/input[1]
    #在搜索框输入要查询的字
    search_btn.send_keys(wname)
    #等待确认按钮加载完成
    confirm_btn = wait.until(
        EC.element_to_be_clickable((By.CSS_SELECTOR,'#search > form > input.button'))##search > form > input.button
    )
    #单击“确认”按钮
    confirm_btn.click()
    #等待5秒
    time.sleep(5)
    #获取当前页面的url
    url = driver.current_url
    #处理html页面
    rq = requests.get(url)
    rq.emcoding = chardet.detect(rq.content)['encoding']
    print(rq.status_code)
    html = rq.content.decode('utf-8')
    html = etree.HTML(html, parser=etree.HTMLParser(encoding='utf-8'))
    PictureList = html.xpath('/html/body/div[1]/img/@src')
    NameList = html.xpath('/html/body/div[1]/img/@alt')
    if  not PictureList:
        return			#因为数据库中的文字和爬取网址的库不完全匹配,会出现查询不到的情况。所以加一个判断,如果没有就结束方法。进行下一个字的搜索。
    def Saving(url, name):
        # 设置存储位置
        root = r'E:\strokes\\'
        path = root + name + '.gif'
        try:
            if not os.path.exists(root):
                os.mkdir(root)
            if not os.path.exists(path):
                print(url)
                r = requests.get(url)
                print(r)
                with open(path, 'wb') as f:
                    f.write(r.content)
                    # f = r.replace(r, "1.jpg")
                    f.close()
                    print("文件保存成功")
            else:
                print("文件已存在")
        except:
            print("爬取失败")
        return
    def GetPicture():
        Picture = PictureList[0]
        Name = NameList[0]
        Saving(Picture, Name)
        return
    GetPicture()
    return
for row in results:
    wname = row[0]
    Search(wname)

开始爬爬爬爬爬。。。。。。
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用 Selenium 自动化淘宝商品详情数据可以分为以下步骤: 1. 安装 Selenium 和浏览器驱动:Selenium 是 Python 中用于自动化 Web 浏览器的库,需要安装;同时需要下载对应浏览器的驱动程序,如 ChromeDriver。 2. 打开浏览器并访问淘宝网站:使用 Selenium 打开指定的浏览器并访问淘宝网站。 3. 搜索关键字并获搜索结果:在搜索框中输入关键字并点击搜索按钮,等待搜索结果加载出来,使用 Selenium搜索结果页面的 HTML 代码。 4. 解析搜索结果页面:使用 BeautifulSoup 解析搜索结果页面,获每个商品的链接。 5. 进入商品详情页面并获数据:遍历每个商品的链接,使用 Selenium 进入商品详情页面并获需要的数据,如商品标题、价格、评论数、销量等。 6. 存储数据:将获到的数据存储到数据库或文件中。 下面是一个示例代码: ```python from selenium import webdriver from bs4 import BeautifulSoup import time # 设置浏览器驱动路径 driver_path = './chromedriver.exe' # 创建浏览器对象 browser = webdriver.Chrome(driver_path) # 设置搜索关键字 keyword = '手机' # 访问淘宝网站 browser.get('https://www.taobao.com/') # 等待页面加载完成 time.sleep(3) # 找到搜索框并输入关键字 browser.find_element_by_name('q').send_keys(keyword) # 点击搜索按钮 browser.find_element_by_class_name('btn-search').click() # 等待搜索结果加载完成 time.sleep(5) # 获搜索结果页面的 HTML 代码 html = browser.page_source # 使用 BeautifulSoup 解析搜索结果页面 soup = BeautifulSoup(html, 'html.parser') # 获所有商品的链接 links = [] for item in soup.find_all('a', class_='J_ClickStat'): link = item.get('href') if link.startswith('https://'): links.append(link) # 遍历每个商品的链接并获数据 for link in links: # 进入商品详情页面 browser.get(link) # 等待页面加载完成 time.sleep(3) # 获商品标题 title = browser.find_element_by_xpath('//h3[@class="tb-main-title"]/text()') # 获商品价格 price = browser.find_element_by_xpath('//div[@class="tb-property-cont"]/div[@class="tb-detail-price"]/span[@class="tb-price"]/text()') # 获商品评论数 comment_count = browser.find_element_by_xpath('//div[@class="tb-rate-counter"]/span[@class="tm-count"]/text()') # 获商品销量 sales_volume = browser.find_element_by_xpath('//div[@class="tb-sales-counter"]/span[@class="tm-count"]/text()') # 打印商品信息 print('标题:', title) print('价格:', price) print('评论数:', comment_count) print('销量:', sales_volume) # 关闭浏览器 browser.quit() ``` 需要注意的是,使用自动化数据容易被网站识别为机器行为,可以添加一些随机等待时间、请求头伪装等方式来降低被识别的概率。同时,数据时也需要遵守网站的虫规则,如不过度频繁访问、不采集敏感信息等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值