实现原理及思路请参考我的另外几篇爬虫实践博客

py3+urllib+bs4+反爬,20+行代码教你爬取豆瓣妹子图:http://www.cnblogs.com/UncleYong/p/6892688.html
py3+requests+json+xlwt,爬取拉勾招聘信息:http://www.cnblogs.com/UncleYong/p/6960044.html
py3+urllib+re,轻轻松松爬取双色球最近100期中奖号码:http://www.cnblogs.com/UncleYong/p/6958242.html

实现代码如下:

  1. #-*- coding:utf-8 -*-
  2. import requests, threading, time
  3. from lxml import etree
  4. from bs4 import BeautifulSoup
  5.  
  6. # 获取源码
  7. def get_html(url):
  8. # url = 'http://www.doutula.com/article/list/?page=1'
  9. 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'}
  10. request = requests.get(url=url, headers=headers) # 网址发送get请求
  11. response = request.content.decode('utf-8') # 获取源码
  12. # print(response)
  13. return response
  14.  
  15. # 匹配图片url
  16. def get_img_html(html):
  17. # soup = BeautifulSoup(html,'html.parser')
  18. soup = BeautifulSoup(html,'lxml') # 解析网页
  19. all_a = soup.find_all('a',class_='list-group-item') # 获取a标签,如果有class或id来命名,一定要加上名字
  20. # class="list-group-item"是a标签的名字
  21. # <a class="list-group-item" href="http://www.doutula.com/article/detail/7536783">
  22. # print(type(all_a)) # <class 'bs4.element.ResultSet'>
  23. # print(all_a)
  24. for i in all_a:
  25. # print(i['href'])
  26. img_html = get_html(i['href']) # 获取内页源码,i['href']表示获取属性值
  27. # print(img_html)
  28. get_img(img_html)
  29. # 获取图片url
  30. def get_img(html):
  31. # soup = etree.HTML(html) # 初始化源码
  32. # items = soup.xpath('//div[@class="artile_des"]') # //表示某个目录下,从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
  33. # # []表示过滤条件
  34. # for item in items:
  35. # imgurl_list = item.xpath('table/tbody/tr/td/a/img/@onerror')
  36. # # print(imgurl_list)
  37. # # start_save_img(imgurl_list)
  38. soup = BeautifulSoup(html, 'lxml')
  39. items = soup.find('div',class_='swiper-slide').find_all('div',class_='artile_des')
  40. # 不能写成这样:find_all后面不能跟find,因为find是找一个,find_all是找多个,从多个中找一个是不对的
  41. # items = soup.find('div',class_='swiper-slide').find_all('div',class_='artile_des').find('img')['src']
  42. # print(items)
  43. imgurl_list = []
  44. for i in items:
  45. imgurl = i.find('img')['src'] # img标签下的src属性
  46. # print(type(imgurl)) # <class 'str'>
  47. # print(imgurl)
  48. imgurl_list.append(imgurl)
  49. start_save_img(imgurl_list) # 这里是对每一组套图做多线程
  50.  
  51. # 下载图片
  52. x = 1
  53. def save_img(img_url):
  54. # global x # 全局变量
  55. # x +=1
  56. # img_url = img_url.split('=')[-1][1:-2].replace('jp','jpg') # 以=分割
  57. # print('正在下载'+'http:'+img_url)
  58. # img_content = requests.get('http:'+img_url).content
  59. # with open('doutu/%s.jpg'%x, 'wb') as f:# urllib下的retrieve也可以下载
  60. # f.write(img_content)
  61. global x # 全局变量
  62. x +=1
  63.  
  64. print('正在下载:'+img_url)
  65. geshi = img_url.split('.')[-1] # 因为图片格式不一样,所以切片,把链接中图片后缀获取到,用于下面拼接文件名
  66. img_content = requests.get(img_url).content
  67. with open('doutu/%s.%s'%(x,geshi), 'wb') as f: # urllib下的retrieve也可以下载
  68. f.write(img_content)
  69.  
  70. def start_save_img(imgurl_list):
  71. for i in imgurl_list:
  72. # print(i)
  73. th = threading.Thread(target=save_img,args=(i,)) # i后面加逗号表示args是一个元组
  74. # target是可调用对象,是一个函数名,线程启动后执行,
  75. th.start()
  76. th.join()
  77. # 主函数
  78. def main():
  79. start_url = 'http://www.doutula.com/article/list/?page={}'
  80. for i in range(1,2):
  81. # print(start_url.format(i))
  82. start_html = get_html(start_url.format(i))
  83. get_img_html(start_html) # 获取内页图片的url
  84.  
  85. if __name__ == '__main__': # 判断文件入口
  86. start_time = time.time()
  87. main()
  88. end_time = time.time()
  89. print(start_time)
  90. print(end_time)
  91. print(end_time-start_time)

py3+requests+urllib+bs4+threading,爬取斗图图片的更多相关文章

  1. python多线程爬取斗图啦数据

    python多线程爬取斗图啦网的表情数据 使用到的技术点 requests请求库 re 正则表达式 pyquery解析库,python实现的jquery threading 线程 queue 队列 ' ...

  2. 爬取斗图网图片,使用xpath格式来匹配内容,对请求伪装成浏览器, Referer 防跨域请求

    6.21自我总结 一.爬取斗图网 1.摘要 使用xpath匹配规则查找对应信息文件 将请求伪装成浏览器 Referer 防跨域请求 2.爬取代码 #导入模块 import requests #爬取网址 ...

  3. python爬取斗图网中的 “最新套图”和“最新表情”

    1.分析斗图网 斗图网地址:http://www.doutula.com 网站的顶部有这两个部分: 先分析“最新套图” 发现地址栏变成了这个链接,我们在点击第二页 可见,每一页的地址栏只有后面的pag ...

  4. Python爬取 斗图表情,让你成为斗图大佬

    话不多说,上结果(只爬了10页内容) 上代码:(可直接运行)   用到Xpath #encoding:utf-8 # __author__ = 'donghao' # __time__ = 2018/ ...

  5. 使用requests+BeaBeautiful Soup爬取妹子图图片

    1. Requests:让 HTTP 服务人类 Requests 继承了urllib2的所有特性.Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定 ...

  6. 爬虫之爬取豆瓣top250电影排行榜及爬取斗图啦表情包解读及爬虫知识点补充

    今日内容概要 如何将爬取的数据直接导入Excel表格 #如何通过Python代码操作Excel表格 #前戏 import requests import time from openpyxl impo ...

  7. shell爬取斗图网

    #!/bin/bash read -p "请输入要爬取的页面数(默认为10):" page_num page_num=${page_num:-} echo $page_num re ...

  8. 【原创】py3+requests+json+xlwt,爬取拉勾招聘信息

    在拉勾搜索职位时,通过谷歌F12抓取请求信息 发现请求是一个post请求,参数为: 返回的是json数据 有了上面的基础,我们就可以构造请求了 然后对获取到的响应反序列化,这样就获取到了json格式的 ...

  9. py3+requests+json+xlwt,爬取拉勾招聘信息

    在拉勾搜索职位时,通过谷歌F12抓取请求信息 发现请求是一个post请求,参数为: 返回的是json数据 有了上面的基础,我们就可以构造请求了 然后对获取到的响应反序列化,这样就获取到了json格式的 ...

随机推荐

  1. ABP从入门到精通(5):.扩展国际化语言资源

    ABP的有些组件使用的该组件自带的语言包资源,所以在有些时候会因为我们当前使用的语言对应的语言包不全,而造成日志一直记录WARN.ABP给我们提供了扩展语言包资源的接口,可以解决这个问题. 以下示例代 ...

  2. 线程池ThreadPoolExecutor整理

    项目用到线程池,但是其实很多人对原理并不熟悉 ,这里只是整理一下 ThreadPoolExecutor java.uitl.concurrent.ThreadPoolExecutor类是线程池中最核心 ...

  3. sqli-labs less 5-6

    sqli-labs less 5-6 从源代码中可以看到,运行返回结果正确的时候只返回you are in....,不会返回数据库当中的信息了,以前的union联合查询就不能用了,开始尝试盲注. 简单 ...

  4. Linux系统本地yum源环境配置记录

    由于IDC的一些服务器没有外网,不能对外访问.所以打算部署一套内网的yum源环境,以供内网服务器使用.以下简单记录下操作过程: 1)下载centos6.9和centos7.3的镜像,并挂载 [root ...

  5. 【ML】ICML2015_Unsupervised Learning of Video Representations using LSTMs

    Unsupervised Learning of Video Representations using LSTMs Note here: it's a learning notes on new L ...

  6. Linux内核分析——进程的切换和系统的一般执行过程

    进程的切换和系统的一般执行过程 一.进程切换的关键代码switch_to分析 (一)进程调度与进程调度的时机分析 1.不同类型的进程有不同的调度需求 第一种分类: (1)I/O-bound:频繁进行I ...

  7. Linux内核设计期中总结

    Linux内核设计期中总结 ● 知识点 一.计算机是如何工作的 计算机是按照冯·诺依曼存储程序的原理. 在执行程序时须先将要执行的相关程序和数据放入内存储器中,在执行程序时CPU根据当前程序指针寄存器 ...

  8. 防止重复提交demo

    利用session防止重复提交 思路: 前端控制:在点击提交按钮后设置按钮不可用. 后台控制:利用session,在初次进入表单页面的时候前生成一个随机token,将token保存到session并返 ...

  9. SE Springer小组之《Spring音乐播放器》可行性研究报告五、六

    5 可选择的其他系统方案 曾经考虑过制作闹钟系统,但考虑到闹钟系统在电脑应用中极其不实用,所以此方案未通过. 6 投资及效益分析 6.1支出 本软件只用于完成课程学习要求,不用做商用,无基础设备等支出 ...

  10. 无限级结构SQL查询所有的下级和所有的下级

    Id,PId无限级结构,查询某个Id的所有下级或所有上级,使用WITH AS查询 查找Id为1所有的下级 /*查找Id为1所有的下级*/ WITH T AS( SELECT Id,PId,Name,0 ...