Selenium实战 爬取B站专栏自定义套图片

初次尝试

使用requests get不到的信息没有图片。

使用selenium

完整代码

import os
import time
import requests
from selenium.webdriver import Chrome
from selenium.webdriver.common.by import By
from  selenium.webdriver.support import ui,expected_conditions
chrome=Chrome(executable_path='chromedriver.exe')

def start():
    items=chrome.find_elements(By.CSS_SELECTOR,'.article-item')
    for item in items:
        a.append(item.find_element(By.CSS_SELECTOR,'.article-title  a').get_attribute('href'))
    chrome.execute_script('var q=document.documentElement.scrollTop=3500')
    time.sleep(3)
    if len(a)<3:
        chrome.find_element(By.CLASS_NAME,'be-pager-next').click()
        time.sleep(3)
        start()
    else:
        get_imgs(a)
def get_imgs(urls):
    for url in urls:
        img_list = []
        chrome.get(url)
        head=chrome.find_element(By.CSS_SELECTOR,'.title-container h1').text
        time.sleep(1)
        chrome.execute_script('var q=document.documentElement.scrollTop=1500')
        time.sleep(2)
        chrome.execute_script('var q=document.documentElement.scrollTop+=2000')
        time.sleep(2)
        chrome.execute_script('var q=document.documentElement.scrollTop+=2000')
        time.sleep(1)
        chrome.execute_script('var q=document.documentElement.scrollTop+=3000')
        time.sleep(1)
        chrome.execute_script('var q=document.documentElement.scrollTop+=3000')
        imgs=chrome.find_elements(By.CSS_SELECTOR,'.article-holder figure')
        for img in imgs:
            i=img.find_element(By.TAG_NAME,'img').get_attribute('src')
            print(i)
            img_list.append(i)
        path = r'F:\360MoveData\Users\ZMZ\Desktop\pachong\\'
        os.mkdir(path + head)
        path2 = r'F:\360MoveData\Users\ZMZ\Desktop\pachong\\' + head + '\\'
        x = 1
        for url in img_list:
            time.sleep(1)
            file_name = head+ str(x) + ".jpeg"
            with open(path2 + file_name, 'wb') as f:
                response = requests.get(url)
                f.write(response.content)
            print("成功爬取%d" % x+head)
            x += 1
        print("爬取结束")

if __name__=='__main__':
    url=f'https://space.bilibili.com/533579000/article'
    chrome.get(url)
    a=[]
    start()

效果

image.png

待优化

经过数次的尝试,我发现如果chrome没有往下拉到底或拉的过快都会导致获取图片地址失败。
待优化的点就是根据网页的长度来设置往下拉的次数。
暂时未发现被封ip的情况
b站的robots协议中禁止爬取img/

代码使用

必要的库

在运行代码之前首先要确定你已经安装好了selenium,chrome以及和chrome对应版本的chromedriver。

pip3 install selenium

chromedriver需要去网上下载

下载地址
注意:chrome需要对应chromedriver的版本

需要修改的代码
if __name__=='__main__':
    url=f'https://space.bilibili.com/533579000/article'

这边的url地址是你想要爬取的专栏地址

    if len(a)<30:
        chrome.find_element(By.CLASS_NAME,'be-pager-next').click()
        time.sleep(3)

这边是你要爬取的图片的套数。

        path = r'F:\360MoveData\Users\ZMZ\Desktop\pachong\\'
        os.mkdir(path + head)
        path2 = r'F:\360MoveData\Users\ZMZ\Desktop\pachong\\' + head + '\\'

这边的地址需要修改为你要存的地址

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值