Advertisement

python 爬虫爬取煎蛋网妹子图,我1T的硬盘装满了!

阅读量:

前言

您好!这里是「brucepk」爬虫系列教程平台。本系列课程基于实例项目的分析内容,并结合实际操作帮助大家掌握Python爬虫技术。您将跟随课程structor深入探索数据抓取与解析的方法论,并通过实践项目提升自己的编程能力与应用水平。每天都有所进步,并逐步提升自己的技能水平!

煎蛋网站

image

不少朋友普遍反映学习Python编程感到乏味,难以入门。实际上,掌握编程技能的最佳途径是通过实际操作积累经验。今天为大家推荐一个有趣的Python3应用——利用爬虫技术获取煎蛋网女性用户的精美图片。项目的画质尚可,快来看看几张精选图片吧。

image

image

这个项目主要依赖于requests、selenium以及beautifulsoup这三个库来完成网站图片的数据采集工作。现在开始,我将向大家详细讲解如何利用Python编程实现网络图像采集与下载的过程。

爬取结果

image

本次爬取已取得的结果是:通过使用该代码即可将获取到的图片存储在我的目标文件夹中;若无该文件夹,则由程序自动生成相应的存储路径;所有获取到的图像均会被存储在此特定文件夹中。

程序构造

image

程序主要是由 6 个函数组成:

  • fetch webpage : 使用WebDriver库请求目标网站
    • parse navigation links : 解析网页上的导航路径
    • check directory existence : 判断目录是否存在, 若不存在则创建
    • extract image URLs : 提取图片链接信息
    • download and store image : 根据图片链接获取并存储图片
    • main program entry point : 定义程序主入口点

程序思路

研究目标网站链接的特点,并揭示其规律。
从目标网站获取图片链接来源。
将图片下载至指定文件夹中。

源代码分析

我们使用开发者工具f12来查看网页细节。随后确认该链接并未存在于原始代码中,并推断该图片可能是由JavaScript脚本驱动的。针对仅靠JavaScript无法访问的网站类型,则可采用Selenium自动化测试请求库完成加载操作。基于Selenium请求机制能够模拟真实浏览器行为进行访问

复制代码
 1browser = webdriver.Chrome()

    
 2wait = WebDriverWait(browser, 3)

利用 selenium 请求网页需要下载 chrome 驱动放在 python 安装目录下。

分页链接分析

复制代码
 1def get_page():

    
 2 base_url = 'http://jandan.net/ooxx/' #第一次进入的原始地址
    
 3 soup = BeautifulSoup(get_html(base_url), 'lxml') #解析原始地址
    
 4 current_pages=soup.select('.cp-pagenavi .current-comment-page')[0].get_text()[1:-1] #取出当前页面字段
    
 5 urllist = []
    
 6 for page in range(1,int(current_pages)+1):
    
 7 real_url=base_url+'page-'+str(page)+'#comments' #拼出分页地址
    
 8 urllist.append(real_url)
    
 9 return urllist #返回所有分页地址列表

base_url = '[http://jandan.net/ooxx/', https://links.jianshu.com/go?to=http%3A%2F%2Fjandan.net%2Fooxx%2F'](此为具体的访问路径),在翻转至下一页的过程中发现,在原始链接后方增添了一个特定的内容项——「page-52#comments」。

在页面导航中,默认会显示当前所在的页面编号(其中用加粗的数字标注),我们可以通过BeautifulSoup库解析网页内容,在HTML结构中定位出表示页码的字段「current-comment-page」。然后使用选择器提取出表示页码的字段「current-comment-page」(例如:

12
),将其整合到原始链接中完成拼接。

创建目录

复制代码
 1def get_pic():

    
 2 for url in get_page():
    
 3 mkdir()
    
 4 html=get_html(url)
    
 5 soup=BeautifulSoup(html,'lxml')
    
 6 allimgs=soup.select('div .text p img')
    
 7 allimgs=re.findall('src="(.*?)"',str(allimgs))
    
 8 download(allimgs)
    
 9 print("下载完毕!")

使用 os.path.exists 方法来判断该目录是否存在。如果不存在,则创建该目录;如果存在,则不做任何处理。

提取图片

复制代码
 1def get_pic():

    
 2 for url in get_page():
    
 3 mkdir()
    
 4 html=get_html(url)
    
 5 soup=BeautifulSoup(html,'lxml')
    
 6 allimgs=soup.select('div .text p img')
    
 7 allimgs=re.findall('src="(.*?)"',str(allimgs))
    
 8 download(allimgs)
    
 9 print("下载完毕!")

通过BeautifulSoup解析源码,并利用特定选择器循环收集网页中的图片链接之后,调用download()函数执行下载操作直至所有图片都被下载完毕

优化改进

当前程序存在一些有待改进之处。例如,在获取数据时使用了Selenium库,并发现其运行效率较低;为了确保页面加载完成并减少卡顿,在等待页面加载完成的时间上我也做了相应的设置(待优化)。此外,在处理图片时,默认将所有页面的图片存储在一个统一文件夹中(未进行分类存储),这部分也可以优化以提高资源管理效率

全部评论 (0)

还没有任何评论哟~