初次尝试
使用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()
效果
待优化
经过数次的尝试,我发现如果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 + '\\'
这边的地址需要修改为你要存的地址