python 爬虫爬取煎蛋网妹子图

python 爬虫爬取煎蛋网妹子图

前言

大家好,这里是「brucepk」爬虫 系列教程。此文首发于「brucepk」公众号,欢迎大家去关注。此系列教程以实例项目为材料进行分析,从项目中学习 python 爬虫,跟着我一起学习,每天进步一点点。

煎蛋网站

煎蛋网.png
煎蛋网.png

很多朋友都反应学 python 语言太枯燥,学不进去,其实学语言最好的方法是自己用所学的语言做项目,在项目中学习语言的用法。今天给大家带来的项目是用 python3 爬取煎蛋网妹子的图片。图片质量还不错,我放两张图片大家感受下。


007bk2ovgy1fsy6w0g6x9j30ia0rfjwd.jpg
007bk2ovgy1fsy6w0g6x9j30ia0rfjwd.jpg

007bk2ovgy1fsplp6cen2j30i20rwn0j.jpg
007bk2ovgy1fsplp6cen2j30i20rwn0j.jpg

这个项目用了 requests + selenium + beautifulsoup 库对网站的图片进行抓取。接下来我就,给大家一步步解析一下,怎么用 python 爬虫爬取图片并下载的。

爬取结果

爬取成果.png
爬取成果.png

以上就是爬取的结果,通过运行 meizi.py 代码,就可以把图片保存在我指定的目录下,如果没有此目录,就用程序自动创建目录,爬取的所有图片都保存在此目录下。

程序构造

程序结构.png
 

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

get_html() :利用 webdriver 来请求对应的网站。
get_page():解析面跳转地址。
mkdir():判断目录是否存在,不存在就创建一个。
get_pic():提取图片链接。
download(allimgs):通过图片链接下载保存。
main():程序执行的主函数。

程序思路

  1. 对目标网站链接进行分析,找出目标网站链接的规律。
  2. 从目标网站里面提取图片链接。
  3. 将图片下载并保存在目录中。

源代码分析

我们通过f12调试页面,看到图片的链接,发现此链接并没有在源代码中,我们推测,图片应该是通过 js 加载的,对于需要 js 才能加载出来的网站,我们就可以利用 selenium 的自动化测试请求库来进行加载。利用 selenium 请求可以模拟真实浏览器访问。


调试.png
 
browser = webdriver.Chrome()
wait = WebDriverWait(browser, 3)

需要下载 chrome 驱动放在 python 安装目录下。

分页链接分析

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

原始链接 base_url = 'http://jandan.net/ooxx/',当我们点击下一页时,发现在原始链接的后面加了一段:
图5

其中加的数字,就是表示现在所在的页数,通过 BeautifulSoup 库对页面进行解析,用选择器提取页数的字段,加入到链接中进行拼接。

创建目录

def mkdir():
    isExists=os.path.exists('E:\jiandan')
    if not isExists:
        print('创建目录')
        os.makedirs('E:\\jiandan') #创建目录 os.chdir('E:\\jiandan') #切换到创建的文件夹 return True else: print('目录已存在,即将保存!') return False![gzh.jpg](https://upload-images.jianshu.io/upload_images/5285452-b6c108884d5c02d0.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240) 

用 os.path.exists 方法来个判断,如果不存在此目录就创建一个,如果存在就忽略。

提取图片

def get_pic():
    for url in get_page(): mkdir() html=get_html(url) soup=BeautifulSoup(html,'lxml') allimgs=soup.select('div .text p img') allimgs=re.findall('src="(.*?)"',str(allimgs)) download(allimgs) print("下载完毕!") 

用 BeautifulSoup 解析源码,用选择器循环提取图片的链接,并调用 download() 函数下载图片直至下载所有图片。

优化改进

源代码我已上传到 Github 上,需要的同学可以点击「阅读原文」,如果觉得程序还不错的话,可以给我项目点个 star。在微信后台回复「jiandan」也可以获取源码。

本次的程序还有一些不足的地方,比如利用 selenium 库在爬取的时候非常的慢,每页我还设置了 3 秒等待时间,这部分待优化。

这波教程不点个赞,说不过去吧?哈哈。这个网站有很多福利,我只能说大家注意身体啊。

推荐阅读

零基础学 python 之人人都爱列表

猜你喜欢

转载自www.cnblogs.com/brucepk/p/9278456.html