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

      

  • 相关阅读:
    匿名变量
    Vue父子组件传值与非父子传值
    TCP三次握手分析
    @media screen 响应式布局
    H5新增多媒体标签
    npm+node+vue配置一套带走
    vue+echarts全国疫情地图
    js本地时间格式化
    vue iview分页
    Vue打包后访问静态资源路径问题
  • 原文地址:https://www.cnblogs.com/uncleyong/p/6892688.html
Copyright © 2020-2023  润新知