python3学习笔记之九——爬取煎蛋上的妹子图

看到csdn公众号上推送的一篇利用selenium+PhantomJs爬取煎蛋妹子图的文章,对于初学爬虫的我跃跃欲试。

selenium是自动化测试的工作,Phantomjs相当于无界面的浏览器,用的内核是webkit,很遗憾的是当我配置完环境之后,调试时,蹦出来一个警告,大致意思selenium不支持Phantomjs,请使用headless的chrome和firefox。后来又查了下,说是selenium3.4版本以后不支持Phantomjs.而我的selenium版本是3.11。

既然提示使用headless的chrome和firefox,我就又去搜索了一下,下载了chromedriver。headless模式就是加一个参数

option = webdriver.ChromeOptions()
option.add_argument( 'headless' )

结果呢,一直提示gpu的问题,通过搜索大佬的文章,得知option必须增加一个参数:

options.add_argument("--disable-gpu")

添加参数之后,倒是可以运行,但是速度奇慢无比,而且遇到稍微复杂的网站,一直会出现超时,根本无法获取页面源文件。

不知道是不是chrome浏览器版本与驱动版本,又或者是和selenium版本的兼容性差?

我果断尝试了firefox的headless模式,结果发现相当好用。

---------------这里是爬取妹子图的分割线----------------

环境如下:

python3.6

selenium3.11

firefox 59.0.2

下载妹子图,首先要分析妹子图的下载链接,打开http://jandan.net/ooxx 煎蛋妹子图首页,在图片上右键查看元素

图片定位到<img src>这行,没错这是图片的地址,但仔细看看会发现每张图片的左上角会有一个‘查看原图’的灰色字体,点开来是高清原图,再看<img src>的上面一行也有一个链接,在href里面,后面的text正是查看原图,复制到浏览器中正是原图的链接。

想要爬取图片,只要先获取这些图片的地址,然后下载下来就可以了,首先获取页面源码。

from bs4 import BeautifulSoup
from selenium import webdriver
from lxml import etree

option = webdriver.FirefoxOptions()
option.set_headless()
driver = webdriver.Firefox( firefox_options = option)
driver.get( 'http://jandan.net/ooxx' )
source = driver.page_source

获取到页面源码之后,将源码进行解析。之前我一直用BeautifulSoup来提取数据

btu = BeautifulSoup(source, 'html.parser' )
imglist = btu.find_all( class_ = 'view_img_link' )
for img in imglist:
print (img.get( 'href' ))

后来发现利用lxml的etree速度更快,提取结果是一致的

content = etree.HTML(source)
imglist = content.xpath( '//div[@class="text"]/p/a/@href' )

唯一不一样的是用xpath直接提取href的链接,不用再像BeautifulSoup中先定位到class,再get(‘href’)

执行结果:


完整代码如下:

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

class download_img ( object ):
def __init__ ( self ):
self .url = 'http://jandan.net/ooxx'
option = webdriver.FirefoxOptions()
option.set_headless()
self .driver = webdriver.Firefox( firefox_options = option)
def pageurl ( self ):
page_url = []
for i in range ( 10 , 12 ):
url = 'http://jandan.net/ooxx/page- %d #comments' % i
page_url.append(url)
print (url)
return page_url
def imgurl ( self , url ):
self .driver.get(url)
time.sleep( 5 )
source = self .driver.page_source
self .driver.quit()
content = etree.HTML(source)
imglist = content.xpath( '//div[@class="text"]/p/a[@class="view_img_link"]/@href' )
for i in range ( len (imglist)):
imglist[i] = 'http:' + imglist[i]
return imglist
def downloder ( self , url ):
i = 1
for each in url:
time.sleep(random.randint( 1 , 10 ))
name = each.split( '/' )[ - 1 ]
content = requests.get(each).content
with open ( 'C: \\ Users \\ CryptFiend \\ Downloads \\ python \\ pic \\ %s ' % name, 'wb+' ) as f:
f.write(content)
print ( '下载第 %s 张图片' % i)
i += 1

if __name__ == '__main__' :
img = download_img()
pageurl = img.pageurl()
for each in pageurl:
imglist = img.imgurl(each)
img.downloder(imglist)


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值