0.准备

  所用到的模块:

  urllib.request,获取源码
  beautifulsoup4(bs4),网页抓取数据
 
  安装bs4,python3 -m pip install beautifulsoup4 
  查看,python3 -m pip show beautifulsoup4

   

1.bs4基本功能

  如何获取标签的数据? 对象+标签名称
  如何获取文件的内容? prettify
 

2.字符串格式化

  %s 占位符 {}.format
  print('http://www.dbmeinv.com/?pager_offset=%s' %2)
  print('http://www.dbmeinv.com/?pager_offset={}'.format(2))
  

3.如何获取网页源码

  urllib.request
  urlopen
  read
 

4.反爬

  网站禁止爬虫,所以获取不到想要的内容,或者请求失败
  那么,这是就需要获取用户代理池信息,加上头部信息,模拟浏览器进行访问
  请求头中找:User-Agent
  
 

5.获取图片 

  src后面都是图片路径,get

   

  图片的标签,find_all
 
  

6.下载

  urlretrieve(link, 路径)
  如果获取到的图片src是相对路径,需要通过字符串拼接完整  

7.多页

  for in range()
  

8.源码

from bs4 import BeautifulSoup
import urllib.request
x = 1 def crawl(url):
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36'}
req = urllib.request.Request(url, headers=headers) # 创建对象
page = urllib.request.urlopen(req,timeout=20) # 设置超时
contents = page.read().decode('utf-8') # 获取源码
# print(contents) soup = BeautifulSoup(contents, 'html.parser')
my_girl = soup.find_all('img')
for girl in my_girl: # 遍历
link = girl.get('src') # 获取到src的值,即图片链接,如果图片链接是相对路径,还需要‘协议 + 主机名 + 端口号 + link’拼接完整
print(link) # 打印获取到的图片url
global x
urllib.request.urlretrieve(link, 'image\%s.jpg'%x)
# x +=1
print('正在下载第%s张图片'%x)
x +=1 for page in range(1, 3): # 爬取第1-2页的图片
# print(page)
# url = 'http://www.dbmeinv.com/?pager_offset=%s'%page # 也可以写%d
url = 'http://www.dbmeinv.com/?pager_offset={}'.format(page)
crawl(url)
print('恭喜你,图片下载完成啦!')

 

9.程序运行中 

  

10.结果

  

py3+urllib+bs4+反爬,20+行代码教你爬取豆瓣妹子图的更多相关文章

  1. 50 行代码教你爬取猫眼电影 TOP100 榜所有信息

    对于Python初学者来说,爬虫技能是应该是最好入门,也是最能够有让自己有成就感的,今天,恋习Python的手把手系列,手把手教你入门Python爬虫,爬取猫眼电影TOP100榜信息,将涉及到基础爬虫 ...

  2. 20行代码教你用python给证件照换底色

    1.图片来源 该图片来源于百度图片,如果侵权,请联系我删除!图片仅用于知识交流.本文只是为了告诉大家:python其实有很多黑科技(牛逼的库),我们既可以用python处理工作中的一些事儿,同时我们也 ...

  3. HTML5游戏实战(4): 20行代码实现FlappyBird

    这个系列很久没有更新了.几个月前有位读者调侃说,能不能一行代码做一个游戏呢.呵呵,接下来一段时间,我天天都在想这个问题,怎么能让GameBuilder+CanTK进一步简化游戏的开发呢.经过几个月的努 ...

  4. 20 行代码极速为 App 加上聊天功能

    现在很多 App 都需要集成 IM 功能,今天就为大家分享一下集成 IM 基本功能的步骤.本文内容以 JMessage 为例.极光 IM ( JMessage ) = 极光推送 ( JPush ) + ...

  5. Blazor组件自做九: 用20行代码实现文件上传,浏览目录功能 (3)

    接上篇 Blazor组件自做九: 用20行代码实现文件上传,浏览目录功能 (2) 7. 使用配置文件指定监听地址 打开 appsettings.json 文件,加入一行 "UseUrls&q ...

  6. iOS开发——实用技术OC篇&8行代码教你搞定导航控制器全屏滑动返回效果

    8行代码教你搞定导航控制器全屏滑动返回效果 前言 如果自定了导航控制器的自控制器的leftBarButtonItem,可能会引发边缘滑动pop效果的失灵,是由于 self.interactivePop ...

  7. 「玩转Python」突破封锁继续爬取百万妹子图

    前言 从零学 Python 案例,自从提交第一个妹子图版本引来了不少小伙伴的兴趣.最近,很多小伙伴发来私信说,妹子图不能爬了!? 趁着周末试了一把,果然爬不动了,爬下来的都是些 0kb 的假图片,然后 ...

  8. JS模版引擎[20行代码实现模版引擎读后感]

    曾经阅读过<只有20行JAVASCRIPT代码, 手把手教你写一个页面模版引擎>这篇文章, 对其中实现模版的想法实在膜拜, 于是有了这篇读后感, 谈谈自己对模版引擎的理解, 以及用自己的语 ...

  9. HTML5游戏实战之20行代码实现打地鼠

    之前写过一篇打地鼠的博客70行的代码实现打地鼠游戏,细致思考过后,发现70行代码都有点多余了,应用tangide的控件特性,能够将代码量缩减到20行左右. 先show一下终于成果,点击试玩:打地鼠.或 ...

随机推荐

  1. Luogu P1546 最短网络 Agri-Net

    其实这道题根本没必要写,但为了测试vector+堆优化的Prim试一发. 再次觉得Prim和Dijkstra很像,堆优化版本也差不多. 和Dijkstra一样,Prim也是在之前的dis点中选取一个最 ...

  2. 校内模拟赛 Attack's Fond Of LeTri

    Attack's Fond Of LeTri 题意: n个房子m条路径边的无向图,每个房子可以最终容纳b个人,初始有a个人,中途超过可以超过b个人,每条边有一个长度,经过一条边的时间花费为边的长度.求 ...

  3. ExtJS初探:了解 Ext Core

    Ext Core是一款和jQuery媲美的轻型JS库,基于MIT许可.对于Dom的操作,我个人还是比较喜欢用jQuery.当然如果项目中用的是ExtJS框架,也就没必要多引用一个jQuery,Ext ...

  4. Sql_join left right

    1.内连接inner join 只返回两张表中所有满足连接条件的行,即使用比较运算符根据每个表中共有的列的值匹配两个表中的行.(inner关键字是可省略的) ①传统的连接写法: 在FROM子句中列出所 ...

  5. json模块 & pickle模块

    之前学习过用eval内置方法可以将一个字符串转成python对象,不过,eval方法是有局限性的,对于普通的数据类型,json.loads和eval都能用,但遇到特殊类型的时候,eval就不管用了,所 ...

  6. ZooKeeper 典型的应用场景——及编程实现

    如何使用 Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储 ...

  7. this.$http.post ||this.$http.put||vue 获取url参

    getClasslist() { this.$http.get('/xxxxx/childlist', { params: { ServiceUnitId: localStorage.getItem( ...

  8. CSS字体大小之em,px,百分比

    首先要记住网页中常规字体的大小为16px. px是用来设置字体的绝对大小.通常为用于物理值的设置.我们在互联网上看到的常规字体大小为16px.而em是指相对于父元素的大小.1em是父元素的1倍,2em ...

  9. Install odoo 11(10) on centos7

    https://www.odoo.com/documentation/11.0/setup/install.html https://nightly.odoo.com/ https://www.odo ...

  10. Activiti的部署问题

    http://www.kafeitu.me/activiti/2012/03/22/workflow-activiti-action.html 既可以通过每次Spring应用程序启动时,执行部署命令. ...