Python爬虫结合selenium爬取某个论坛上中编辑器中的所有表情(img)

交代引用的库:
1)、引用了selenium库

from selenium import webdriver
from selenium.webdriver.common.by import By

2)、引用了urllib,urllib3,bd4以及re、os等系统库

import time,re,os,requests
from bs4 import BeautifulSoup
from urllib.request import urlopen
from urllib.request import Request

问题来源:
1、某个论坛的编辑器为UEditor的富文本编辑器,不能通过urllib库直接爬取HTML,再解析HTML获取URL;
2、所有表情的URL源无固定联系;
3、论坛编辑中的表情未本地化;(根本原因)

直接上代码:

    driver = webdriver.Firefox()
    driver.implicitly_wait(20)
    driver.get('论坛网址不方便透露')

这里是点击打开编辑器:

    driver.find_element(By.定位方式,"元素定位").click()

由于编辑器中个别组件未本地化,需要加载时间,我这里加了5秒的强制等待时间,也可以换成显性等待:

    time .sleep(5)

这里是点击表情按钮:

    driver.find_element(By.定位方式,"元素定位").click()

获取HTML:

    html = driver.page_source

解析获取的HTML(html.parser这个是python库里面自带的解析器,无需安装):

    soup = BeautifulSoup(html,"html.parser")

寻找class的值,在获取地整个HTML中寻找所有 img (所有img的class_=”emojioneemoji”)

    find_img_1 = soup.find_all(class_="emojioneemoji")

关闭webdriver打开的浏览器,从这里开始不需要浏览器了:

    driver.close()

利用os系统库创建下载图片保存的文件夹:

    os.mkdir(r'C:\Users\\Administrator\Desktop\img_download')
    os.chdir(r'C:\Users\\Administrator\Desktop\img_download')

利用 i 将网址一个一个带出来,进行正则 因为 find_img_1输出的是一个字典,所以这里带出来的值需要强转(通过以下正则分别提取了表情的保存文件名,img的URL地址):

for i in  find_img_1:
    i = str(i)
    img_url_0 = re.sub('data-src',"src",a)   #将'data-src'字段变更为"src",
    img_url_1 = re.split(" ",img_url_0)      #利用空格转化为元组
    img_url_2 = img_url_1[-1]                #取元组中的最后一个值
    img_url_3 = re.sub('src="',"",img_url_2) #将'src="'全部删除
    img_url_4 = re.sub('"/>',"",img_url_3)   #将'"/>'全部删除
    img1 = re.split(r"/", img_url_4)         #利用"/"符号转化为元组
    filename = img1[-1]                      #这里就是文件名

这里通过正则获取到的地址是不带‘http’开头的url地址,添加获得我们要的URL:

    img_url="http:"+img_url_4

利用requests.get(img地址)发送请求:

    r=requests.get(img_url)
    biaopqing=r.content

解析HTML页面,获取img,利用Request函数发送请求:

    soup_img=BeautifulSoup(biaopqing,"html.parser").findAll('img',{"src": re.compile(r".?\.(png)")})
    req = Request(img_url)
    req.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 Safari/537.36')

获取并利用read()解析响应:

    respon = urlopen(req)
    url=respon.read()

保存图片至我们创建好的文件夹中:

    with open(filename,"wb")as f:
        f.write(url)

感谢浏览!!!
之所以我要这样去做 ,是因为第一,无法直接通过解析论坛页面获取表情的URL;第二表情的URL地址格式不一,命名不一;第三总共是近一万的表情,纯正则太麻烦。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值