动态网页抓取(爬取一个图片网站花瓣网,写一个比较简单的爬虫)

优采云 发布时间: 2021-12-05 14:12

  动态网页抓取(爬取一个图片网站花瓣网,写一个比较简单的爬虫)

  今天我们要爬取一张图片网站花瓣网,写一个比较简单的图片下载爬虫;

  

  迪列巴

  图片太多了,我只剪了这些,大概几千张;

  对,没错,就是你喜欢的胖迪,

  1、 先分析一下花瓣网图片的加载方式

  打开花瓣网首页,搜索“迪丽热巴”,

  

  第一页加载20张图片

  弹出登录框时下拉加载第二页图片,只有登录账号才能继续加载后续所有图片;

  

  第二页加载了20张图片

  可以看出的图片加载是异步的。这时候我们可以选择selenium来模拟登录网页,模仿浏览器的操作不断下拉加载所有图片;

  2、主要思想:

  首先,登录您的帐户并输入您要搜索的图片。每次下拉加载当前页面的图片后,提取图片的url并保存在列表中。由于每页有20张图片,我也在这里下载图片。每保存20个url就下载对应的20张图片;

  3、准备:

  安装selenium库,pip或者下载到本地安装都可以;

  下面是安装Phantomjs或者Chrome

  

  chromedriver的安装路径

  

  phantomjs安装路径

  可以自己百度下载,也可以参考下面的博客,谢谢这位博主

  Windows下安装PIP+Phantomjs+Selenium

  4、 直接上传下面的代码

<p>from selenium import webdriver

import time

import os

import requests

class Huaban():

#获取图片url并存到列表urls_list

def get_picture_url(self, content):

global path

path = "E:\spider\pictures\huaban" + '\\' + content

# 保存图片到磁盘文件夹 file_path中,默认为当前脚本运行目录下的文件夹

if not os.path.exists(path):

os.makedirs(path)

url = "http://huaban.com"

# 使用Chrome浏览器模拟打开网页,但是要把下载的chromedriver.exe放在python的文件路径下,

# 调试好之后换成PhantomJs,速度应该会快一点

# driver = webdriver.PhantomJs()

# 下拉滑动浏览器屏幕,具体下拉多少根据自己实际情况决定

driver = webdriver.PhantomJS()

#driver = webdriver.Chrome()

# 设置全屏

driver.maximize_window()

driver.get(url)

time.sleep(8)

# 点击登录、呼起登录窗口

driver.find_elements_by_xpath('//a[@class="login btn wbtn"]')[0].click()

# sign in the username

try:

driver.find_elements_by_xpath('//input[@name="email"]')[0].send_keys('花瓣账号')

print('user success!')

except:

print('user error!')

time.sleep(3)

# sign in the pasword

try:

driver.find_elements_by_xpath('//input[@name="password"]')[0].send_keys('账号密码')

print('pw success!')

except:

print('pw error!')

time.sleep(3)

# click to login

try:

driver.find_elements_by_xpath('//a[@class="btn btn18 rbtn"]')[0].click()

print('click success!')

except:

print('click error!')

time.sleep(3)

#搜索图片

driver.find_elements_by_xpath('//input[@placeholder="搜索你喜欢的"]')[0].send_keys(content)

driver.find_elements_by_xpath('//form[@id="search_form"]/a')[0].click()

time.sleep(5)

i = 0

page = 1

global name

global store_path

global urls_list

urls_list = []

#获取图片的总数

pictures_count = driver.find_elements_by_xpath('//a[@class="selected"]/i')[0].text

print(pictures_count)

pages = int(int(pictures_count) / 20)

print(pages)

#匹配到图片url所在的元素

url_elements = driver.find_elements_by_xpath('//span[@class="stop"]/../img')

#遍历图片元素的列表获取图片的url

for url_element in url_elements:

picture_url = url_element.get_attribute("src")[:-3] + "658"

#防止获取重复的图片url

if picture_url not in urls_list:

urls_list.append(picture_url)

while page

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线