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.结果
__EOF__
本文作者:持之以恒(韧)
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevTestOps)、测开等
面试必备:项目实战(性能、自动化)、简历笔试,https://www.cnblogs.com/uncleyong/p/15777706.html
测试提升:从测试小白到高级测试修炼之路,https://www.cnblogs.com/uncleyong/p/10530261.html
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!
关于博主:擅长性能、全链路、自动化、企业级自动化持续集成(DevTestOps)、测开等
面试必备:项目实战(性能、自动化)、简历笔试,https://www.cnblogs.com/uncleyong/p/15777706.html
测试提升:从测试小白到高级测试修炼之路,https://www.cnblogs.com/uncleyong/p/10530261.html
欢迎分享:如果您觉得文章对您有帮助,欢迎转载、分享,也可以点击文章右下角【推荐】一下!