【python小练】图片爬虫之BeautifulSoup4
Python3用不了Scrapy!
Python3用不了Scrapy!
Python3用不了Scrapy!
[重要的事情说三遍,据说大神们还在尝试把scrapy移植到python3,特么浪费我半个小时pip scrapy = - =]
【更新:py3现在可以用scrapy了,感谢大神们=w=】
先前用正则表达式匹配出符合要求的<img>标签真的超麻烦的,正则式错一点点都要完蛋,用bs4感觉方便很多。
bs4是将整个html拆解成字典和数组,所以处理起来比较简单。
以这个页面为例(毕竟堆糖本命):http://www.duitang.com/search/?kw=%E6%96%87%E8%B1%AA%E9%87%8E%E7%8A%AC&type=feed#!s-p1
要下载我想要的图片,最终目标是图片的url数据。
先看页面源码:
1. 读取页面代码:
html_doc = urllib.request.urlopen(url + "#!s-p" + str(n+x-1)).read().decode('utf-8')
soup = BeautifulSoup(html_doc, "lxml")
2. 见上图,我想下载的图片都包含在符合【属于class="a"的<a>标签】这个特点的<a>标签下,用bs4找出这些<a>标签,用下面这句代码:
soup.find_all('a', class_='a')
#soup.find_all('(标签名)',(符合属性))
3. 从中找出图片<img>标签,并获取链接地址url到img_src:
for myimg in soup.find_all('a', class_='a'):
img_src = myimg.find('img').get('src')
从第二步来看确实是比纯粹用正则表达式省时省力。
完整代码如下,其实也只改了正则那一小部分:
from bs4 import BeautifulSoup
import urllib.request
import os def downlaodimg(url,m,n): os.chdir(os.path.join(os.getcwd(), 'photos'))
t = 1 # 记录图片张数 for x in range(n-m+1):
html_doc = urllib.request.urlopen(url + "#!s-p" + str(n+x-1)).read().decode('utf-8')
soup = BeautifulSoup(html_doc, "lxml") for myimg in soup.find_all('a', class_='a'):
pic_name = str(t) + '.jpg'
img_src = myimg.find('img').get('src')
urllib.request.urlretrieve(img_src, pic_name)
print("Success!" + img_src)
t += 1
print("Next page!") downlaodimg("http://www.duitang.com/search/?kw=%E6%96%87%E8%B1%AA%E9%87%8E%E7%8A%AC&type=feed",1,3)
和前一篇一样添加了起始页和终止页两个参数。
下载后文件夹:
ps:太宰桑真是太萌辣(●'◡'●)ノ♥不说了再去看一遍~
【python小练】图片爬虫之BeautifulSoup4的更多相关文章
- 【python小练】0013
第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-) 科科...妹子就算了,大晚上的爬点吃的吧.食物图集:抿一口,舔一舔,扭一扭~·SCD 写个简单的爬图爬虫 ...
- 【python小练】0010
第 0010 题:使用 Python 生成类似于下图中的字母验证码图片 思路: 1. 随机生成字符串 2. 创建画布往上头写字符串 3. 干扰画面 code: # codeing: utf-8 fro ...
- 【python小练】0005
第 0005 题:你有一个目录,装了很多照片,把它们的尺寸变成都不大于 iPhone5 分辨率的大小. 首先,iphone5的分辨率是1136x640. if条件句判断横(纵)向是否大于对应的ipho ...
- python 斗图图片爬虫
捣鼓了三小时,有一些小Bug,望大佬指导 废话不说,直接上代码: #!/usr/bin/python3 # -*- coding:UTF-8 -*- import os,re,requests fro ...
- python+tkinter+动画图片+爬虫(查询天气)的GUI图形界面设计
1.完整代码: import time import urllib.request #发送网络请求,获取数据 import gzip #压缩和解压缩模块 import json #解析获得的数据 fr ...
- 【python小练】0014题 和 0015 题
第 0014 题: 纯文本文件 student.txt为学生信息, 里面的内容(包括花括号)如下所示: { ":["张三",150,120,100], ":[& ...
- 【python小练】0004
第 0004 题:任一个英文的纯文本文件,统计其中的单词出现的个数. 先回忆一下各种括号的用途: () tuple [] list {} dict ([]) set——需要一个list作为输入合集 c ...
- 【python小练】0002
第 0002 题:将 0001 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中. . . .(一脸懵逼) Python访问数据库:(廖雪峰python教程) 1. SQLi ...
- 【python小练】0001
第 0001 题:做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? # coding ...
随机推荐
- mui侧滑菜单"点击含有mui-action-menu类的控件"无法实现侧滑
.mui-action-menu 标题栏 菜单按钮 指定href="#id"显示与隐藏侧滑菜单 html: <div class="mui-off-canvas-w ...
- codeforces Hello 2019(未写完)
A. Gennady and a Card Game a题惯例签到题 题意:给你一张牌,再给你5张牌,判断能不能出一次牌... 所以只要检查第二行中的某个卡是否与第一行中的卡具有共同字符 有就输出YE ...
- vue2.0项目实战(5)vuex快速入门
Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.Vuex 也集成到 Vue 的官方调试工具 ...
- WebAPI接口安全校验
通过网上查看相关WebAPI接口验证的方法,整理了一下,直接上代码,功能不复杂,有问题留言, //--------------------------------------------------- ...
- 每添加一张图片后,GDI对象 + 3 原因: ImageList_AddIcon(hIcon) 后没调用 DestroyIcon(hIcon)
今天无意间在[任务管理器]中发现,每添加1张图片后,应用程序的 GDI对象 + 3,添加图片后,再把所有图片删除, GDI对象数量没减少! 排查原因,发现: GDI对象 + 3 的代码是: int o ...
- react-native中的scrollables
这是一个点击切换的demo 先看效果 然后看实现的代码 import React from 'react'; import { Text, View } from 'react-native'; im ...
- 第二篇-ubuntu18.04下怎么制作GIF动画
一.在桌面打开终端 二.接着通过apt安装byzanz.sudo apt-get install byzanz 三.安装完成后在终端执行“xwininfo”.xwininfo 四.然后鼠标会变成“+” ...
- (sort 排序)P1583 魔法照片 洛谷
题目描述 一共有n(n≤20000)个人(以1--n编号)向佳佳要照片,而佳佳只能把照片给其中的k个人.佳佳按照与他们的关系好坏的程度给每个人赋予了一个初始权值W[i].然后将初始权值从大到小进行排序 ...
- 应用实战:从Redis到Aerospike,我们踩了这些坑
个推专注为开发者们提供消息推送服务多年.通过个推SDK,手机终端与服务器建立长连接,维持在线状态.然而在网络异常等情况下,消息无法实时送达到终端用户,因而推送服务器建立了一份离线消息列表,以待用户重新 ...
- vue初始化页面dom操纵 $nextTick
new Vue({ el: '#app', data:{ }, mounted: function () {/*生命周期函数*/ this.$nextTick(function () { $(&quo ...