动态网页抓取(这世上如果有天堂,天堂应该是图书馆的模样(图))

优采云 发布时间: 2022-03-13 18:00

  动态网页抓取(这世上如果有天堂,天堂应该是图书馆的模样(图))

  如果这个世界上有天堂,天堂应该就像一个图书馆。---【阿根廷】豪尔赫·路易斯·博尔赫斯

  好开心,终于可以批量下载茜茜公主的照片了,好漂亮的女人啊!因为刘亦菲在这个页面上的星图画墙是动态页面,直接阅读页面内容是无法获取图片信息的,所以我们需要另辟蹊径。

  在解决动态网页时,我们通常可以采取以下两种方法:

  1.通过抓包工具分析js和ajax的请求,模拟请求获取js加载的数据(对于小白来说还是有难度的)。

  2.调用浏览器内核获取加载网页的源代码,然后解析源代码。

  本文主要使用selenium+python+BeautifulSoup的结构来抓图。

  a) Selenium 是一种用于模拟浏览器和进行自动化测试的工具。它提供了一组 API 来与真正的浏览器内核交互。使用起来也比较简单。

  b)BeautifulSoup是一个解析网页信息的工具,可以从网页中过滤出我们想要的东西。

  项目目的:从刘亦菲的图片栏中抓取图片并存储在电脑上

  一。使用 selenium 模拟打开浏览器

  1driver = webdriver.Firefox()

2driver.get('http://image.baidu.com/activity/starfans/2214592512 1383889887?&albumtype=0')

3

  1 *二、解析网页信息*

2

  我们先按F12查看网页的评论信息,通过图片定位评论元素。可以看到下图:

  通过分析几张图片的信息,我们发现每张图片的信息格式都是一样的,所以我们可以通过BeautifulSoup找到

  元素节点,然后通过访问其子节点两次,获得到图像的链接,即“src”信息。

  三、使用PIL模块存储图片

  上面是通用模块,下面是程序代码:

  1#-*-coding:utf-8 -*-

2from selenium import webdriver

3from selenium.webdriver.common.keys import Keys

4from selenium.webdriver.support.ui import WebDriverWait

5from bs4 import BeautifulSoup

6from PIL import Image

7import urllib2

8import StringIO

9import time

10

11

12driver = webdriver.Firefox()

13driver.get('http://image.baidu.com/activity/starfans/2214592512 1383889887?&albumtype=0')

14soup = BeautifulSoup(driver.page_source)

15all = soup.find_all("div", class_="img-container")

16time.sleep(2)

17count =0

18number=0

19for each in all:

20 number+=1

21 picUrl = each.contents[0].contents[0]['src']

22 print picUrl

23 try:

24 imgString=urllib2.urlopen(picUrl).read()

25 im=Image.open(StringIO.StringIO(imgString))

26 except:

27 continue

28 count += 1

29 print count

30 imgPath='/home/fiona/fei/photo/'+ str(count)+'.jpg'

31 im.save(imgPath)

32

33print number

34driver.quit()

35

  1 提取出来的图片如下:

2

  项目问题:

  一页有60多张照片,但只拍了30张。我不知道原因。有知道的可以给我留言,谢谢!

  参与信息:

  (好文章)

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线