python爬虫爬取美女图片(selenium)

之前爬一个美女图片网站,因为是动态加载网站,爬下来的图片全是转呀转的GIF图,气死我了,学了selenium之后,龙王归来,势在必得

先看需要的库

from selenium import webdriver
from lxml import etree
import time
import requests

我们使用selenium去打开页面

#实例化了一个浏览器对象(一定要传入浏览器的驱动程序)
wd = webdriver.Chrome(executable_path=r'./chromedriver/chromedriver.exe')
#打开网站
wd.get('这里写你要爬的网址,这里就不方便展示了')

# UA伪装请求头
header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chromeh/81.0.4044.138 Safari/537.36'
}

selenium获取网页源码

page_text = wd.page_source

再使xpath去获取图片地址

tree = etree.HTML(page_text)

tr = tree.xpath('//div[@class="nbodys"]/img/@src')

爬完之后发现一个问题,依旧出现转呀转的GIF图,是因为这个网站的图片是动态加载,必须要慢慢去滚动页面,才能加载出来

我们使用js的下拉页面,使用for循环一点一点的下拉

for i in range(1,20000,500):

    wd.execute_script("window.scrollTo(0, %s);"%i)

    page_text = wd.page_source

    tree = etree.HTML(page_text)

这里又出现问题,图片网址夹杂在一堆相同的GIF图地址之中,而且爬出来的h图网址有重合的地方,是因为selenium下拉500的话,会有地方重合爬取

我们需要使用遍历,将一个一个网址遍历出来,再设定一个列表,然后再去判断是否为转呀转GIF图的网址,不是的话,就存在列表之中,再将列表进行去重,最后得到正确的网址

#创建一个空的列表
num = []
#将爬出东西的遍历
for trr in tr:
    #去除障碍信息
    if trr != '/Public/images/tian/loadpic.gif':
        #将爬取到的图片地址存储到num中
        um.append(trr)
#去重
num = list(set(num))

最后进行下载图片

for sum in num:

    #魔鬼细节:网站程序员在jpg后面加了空格防爬,去除即可
    sum = sum.replace(' ','')

    #剪切网址序号作为图片名字
    sy = sum[-6:-4]

    #去除下划线
    sy = sy.replace('_', '')

    img = requests.get(url=sum, headers=header).content

    imgpath = './selenium-图片/' + sy + '.jpg'

    with open(imgpath, 'wb') as fp:
        # 传入二进制内容
        fp.write(img)

        print(sy,'爬取成功!')

print("爬取成功")

 

完整代码

from selenium import webdriver
from lxml import etree
import time
import requests

#实例化了一个浏览器对象(一定要传入浏览器的驱动程序)
wd = webdriver.Chrome(executable_path=r'./chromedriver/chromedriver.exe')
#打开网站
wd.get('这里写你要爬的网址,这里就不方便展示了')

# UA伪装请求头
header = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chromeh/81.0.4044.138 Safari/537.36'
}

#创建一个空的列表
num = []

print("开始爬取...")

for i in range(1,20000,500):

    wd.execute_script("window.scrollTo(0, %s);"%i)

    page_text = wd.page_source

    tree = etree.HTML(page_text)

    tr = tree.xpath('//div[@class="nbodys"]/img/@src')

    #将爬出东西的遍历
    for trr in tr:

        #去除障碍信息
        if trr != '/Public/images/tian/loadpic.gif':

            #将爬取到的图片地址存储到num中
            num.append(trr)

    time.sleep(1.5)

#去重
num = list(set(num))

for sum in num:

    #魔鬼细节:网站程序员在jpg后面加了空格防爬,去除即可
    sum = sum.replace(' ','')

    #剪切网址序号作为图片名字
    sy = sum[-6:-4]

    #去除下划线
    sy = sy.replace('_', '')

    img = requests.get(url=sum, headers=header).content

    imgpath = './selenium-图片/' + sy + '.jpg'

    with open(imgpath, 'wb') as fp:
        # 传入二进制内容
        fp.write(img)

        print(sy,'爬取成功!')

print("爬取成功")

 

最终的图片就不放出来了,反正非常舒服,这里是提供一个思路,大家注意身体[dog]

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小航冲冲冲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值