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

本文介绍使用selenium和Firefox的headless模式爬取煎蛋网妹子图片的过程。解决了PhantomJS兼容性问题,并对比了不同浏览器headless模式的表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

看到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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值