遇一山,过一山,处处有风景;只要勇敢向前,一路尽是繁花盛开。 | (点击查看→)【测试干货】python/java自动化、持续集成、性能、测开、简历、笔试面试等

py3+urllib+bs4+反爬,20+行代码教你爬取豆瓣妹子图

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.结果

  

 

posted @ 2017-05-23 09:53  全栈测试笔记  阅读(1705)  评论(0编辑  收藏  举报
浏览器标题切换
浏览器标题切换end