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的更多相关文章

  1. 【python小练】0013

    第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-) 科科...妹子就算了,大晚上的爬点吃的吧.食物图集:抿一口,舔一舔,扭一扭~·SCD 写个简单的爬图爬虫 ...

  2. 【python小练】0010

    第 0010 题:使用 Python 生成类似于下图中的字母验证码图片 思路: 1. 随机生成字符串 2. 创建画布往上头写字符串 3. 干扰画面 code: # codeing: utf-8 fro ...

  3. 【python小练】0005

    第 0005 题:你有一个目录,装了很多照片,把它们的尺寸变成都不大于 iPhone5 分辨率的大小. 首先,iphone5的分辨率是1136x640. if条件句判断横(纵)向是否大于对应的ipho ...

  4. python 斗图图片爬虫

    捣鼓了三小时,有一些小Bug,望大佬指导 废话不说,直接上代码: #!/usr/bin/python3 # -*- coding:UTF-8 -*- import os,re,requests fro ...

  5. python+tkinter+动画图片+爬虫(查询天气)的GUI图形界面设计

    1.完整代码: import time import urllib.request #发送网络请求,获取数据 import gzip #压缩和解压缩模块 import json #解析获得的数据 fr ...

  6. 【python小练】0014题 和 0015 题

    第 0014 题: 纯文本文件 student.txt为学生信息, 里面的内容(包括花括号)如下所示: { ":["张三",150,120,100], ":[& ...

  7. 【python小练】0004

    第 0004 题:任一个英文的纯文本文件,统计其中的单词出现的个数. 先回忆一下各种括号的用途: () tuple [] list {} dict ([]) set——需要一个list作为输入合集 c ...

  8. 【python小练】0002

    第 0002 题:将 0001 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中. . . .(一脸懵逼) Python访问数据库:(廖雪峰python教程) 1. SQLi ...

  9. 【python小练】0001

    第 0001 题:做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? # coding ...

随机推荐

  1. uvaLive7303 Aquarium (kruskal)

    题意:给R*C的房间,每个房间被左上-右下或右上-左下的墙分割为两个小房间,将分割移除有一定花费,问使所有小房间联通需要的最小花费 把每个房间分成左右(上下?)两个点,判一判,本来就联通的加零边,一个 ...

  2. 【CH6901】骑士放置

    题目大意:给定一个 N*M 的棋盘,有一些格子禁止放棋子.问棋盘上最多能放多少个不能互相攻击的骑士(国际象棋的"骑士",类似于中国象棋的"马",按照" ...

  3. (七)修改上一条SQL语句,NULL值的滤空函数nvl

    修改上一条SQL语句 1.用c命令来修改(c 即 change ) 默认,光标闪烁位置指向上一条SQL语句的第一行.输入二则定位到第二行. c /错误的关键字/正确的关键字 SQL form emp; ...

  4. ES6(promise)_解决回调地狱初体验

    一.前言 通过这个例子对promise解决回调地狱问题有一个初步理解. 二.主要内容 1.回调地狱:如下图所示,一个回调函数里面嵌套一个回调函数,这样的代码可读性较低也比较恶心 2.下面用一个简单的例 ...

  5. nginx最简安装

    在 CentOS 6.2  下安装nginx 一:nginx所需依赖的安装 用yum安装依赖: yum -y install zlib zlib-devel openssl openssl-devel ...

  6. 字符输出流 FileWriter

    FileWriter 方法: writer(); flush(); package cn.lideng.demo3; import java.io.FileWriter; import java.io ...

  7. 使用rdbtools工具来解析redis rdb文件

    工欲善其事必先利其器,日常工作中,好的工具能够高效的协助我们工作:今天介绍一款用来解析redis rdb文件的工具,非常好用.会之,受用无穷! 一.rdbtools工具介绍 源码地址:https:// ...

  8. gulp API 文档

    gulp.src(globs[, options]) 输出(Emits)符合所提供的匹配模式(glob)或者匹配模式的数组(array of globs)的文件. 将返回一个 Vinyl files  ...

  9. java io系列13之 BufferedOutputStream(缓冲输出流)的认知、源码和示例

    本章内容包括3个部分:BufferedOutputStream介绍,BufferedOutputStream源码,以及BufferedOutputStream使用示例. 转载请注明出处:http:// ...

  10. JAVA核心技术I---JAVA基础知识(查漏补缺private,static)

    一:private对于类和对象(同C++) private是只有这个类内部可以访问(类的成员函数和定义初始化) private是类之间的限制,而不是对对象的限制<重点> 同类对象是可以直接 ...