py3+requests+urllib+bs4+threading,爬取斗图图片
实现原理及思路请参考我的另外几篇爬虫实践博客
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
实现代码如下:
- #-*- coding:utf-8 -*-
- import requests, threading, time
- from lxml import etree
- from bs4 import BeautifulSoup
- # 获取源码
- def get_html(url):
- # url = 'http://www.doutula.com/article/list/?page=1'
- 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'}
- request = requests.get(url=url, headers=headers) # 网址发送get请求
- response = request.content.decode('utf-8') # 获取源码
- # print(response)
- return response
- # 匹配图片url
- def get_img_html(html):
- # soup = BeautifulSoup(html,'html.parser')
- soup = BeautifulSoup(html,'lxml') # 解析网页
- all_a = soup.find_all('a',class_='list-group-item') # 获取a标签,如果有class或id来命名,一定要加上名字
- # class="list-group-item"是a标签的名字
- # <a class="list-group-item" href="http://www.doutula.com/article/detail/7536783">
- # print(type(all_a)) # <class 'bs4.element.ResultSet'>
- # print(all_a)
- for i in all_a:
- # print(i['href'])
- img_html = get_html(i['href']) # 获取内页源码,i['href']表示获取属性值
- # print(img_html)
- get_img(img_html)
- # 获取图片url
- def get_img(html):
- # soup = etree.HTML(html) # 初始化源码
- # items = soup.xpath('//div[@class="artile_des"]') # //表示某个目录下,从匹配选择的当前节点选择文档中的节点,而不考虑它们的位置。
- # # []表示过滤条件
- # for item in items:
- # imgurl_list = item.xpath('table/tbody/tr/td/a/img/@onerror')
- # # print(imgurl_list)
- # # start_save_img(imgurl_list)
- soup = BeautifulSoup(html, 'lxml')
- items = soup.find('div',class_='swiper-slide').find_all('div',class_='artile_des')
- # 不能写成这样:find_all后面不能跟find,因为find是找一个,find_all是找多个,从多个中找一个是不对的
- # items = soup.find('div',class_='swiper-slide').find_all('div',class_='artile_des').find('img')['src']
- # print(items)
- imgurl_list = []
- for i in items:
- imgurl = i.find('img')['src'] # img标签下的src属性
- # print(type(imgurl)) # <class 'str'>
- # print(imgurl)
- imgurl_list.append(imgurl)
- start_save_img(imgurl_list) # 这里是对每一组套图做多线程
- # 下载图片
- x = 1
- def save_img(img_url):
- # global x # 全局变量
- # x +=1
- # img_url = img_url.split('=')[-1][1:-2].replace('jp','jpg') # 以=分割
- # print('正在下载'+'http:'+img_url)
- # img_content = requests.get('http:'+img_url).content
- # with open('doutu/%s.jpg'%x, 'wb') as f:# urllib下的retrieve也可以下载
- # f.write(img_content)
- global x # 全局变量
- x +=1
- print('正在下载:'+img_url)
- geshi = img_url.split('.')[-1] # 因为图片格式不一样,所以切片,把链接中图片后缀获取到,用于下面拼接文件名
- img_content = requests.get(img_url).content
- with open('doutu/%s.%s'%(x,geshi), 'wb') as f: # urllib下的retrieve也可以下载
- f.write(img_content)
- def start_save_img(imgurl_list):
- for i in imgurl_list:
- # print(i)
- th = threading.Thread(target=save_img,args=(i,)) # i后面加逗号表示args是一个元组
- # target是可调用对象,是一个函数名,线程启动后执行,
- th.start()
- th.join()
- # 主函数
- def main():
- start_url = 'http://www.doutula.com/article/list/?page={}'
- for i in range(1,2):
- # print(start_url.format(i))
- start_html = get_html(start_url.format(i))
- get_img_html(start_html) # 获取内页图片的url
- if __name__ == '__main__': # 判断文件入口
- start_time = time.time()
- main()
- end_time = time.time()
- print(start_time)
- print(end_time)
- print(end_time-start_time)
py3+requests+urllib+bs4+threading,爬取斗图图片的更多相关文章
- python多线程爬取斗图啦数据
python多线程爬取斗图啦网的表情数据 使用到的技术点 requests请求库 re 正则表达式 pyquery解析库,python实现的jquery threading 线程 queue 队列 ' ...
- 爬取斗图网图片,使用xpath格式来匹配内容,对请求伪装成浏览器, Referer 防跨域请求
6.21自我总结 一.爬取斗图网 1.摘要 使用xpath匹配规则查找对应信息文件 将请求伪装成浏览器 Referer 防跨域请求 2.爬取代码 #导入模块 import requests #爬取网址 ...
- python爬取斗图网中的 “最新套图”和“最新表情”
1.分析斗图网 斗图网地址:http://www.doutula.com 网站的顶部有这两个部分: 先分析“最新套图” 发现地址栏变成了这个链接,我们在点击第二页 可见,每一页的地址栏只有后面的pag ...
- Python爬取 斗图表情,让你成为斗图大佬
话不多说,上结果(只爬了10页内容) 上代码:(可直接运行) 用到Xpath #encoding:utf-8 # __author__ = 'donghao' # __time__ = 2018/ ...
- 使用requests+BeaBeautiful Soup爬取妹子图图片
1. Requests:让 HTTP 服务人类 Requests 继承了urllib2的所有特性.Requests支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定 ...
- 爬虫之爬取豆瓣top250电影排行榜及爬取斗图啦表情包解读及爬虫知识点补充
今日内容概要 如何将爬取的数据直接导入Excel表格 #如何通过Python代码操作Excel表格 #前戏 import requests import time from openpyxl impo ...
- shell爬取斗图网
#!/bin/bash read -p "请输入要爬取的页面数(默认为10):" page_num page_num=${page_num:-} echo $page_num re ...
- 【原创】py3+requests+json+xlwt,爬取拉勾招聘信息
在拉勾搜索职位时,通过谷歌F12抓取请求信息 发现请求是一个post请求,参数为: 返回的是json数据 有了上面的基础,我们就可以构造请求了 然后对获取到的响应反序列化,这样就获取到了json格式的 ...
- py3+requests+json+xlwt,爬取拉勾招聘信息
在拉勾搜索职位时,通过谷歌F12抓取请求信息 发现请求是一个post请求,参数为: 返回的是json数据 有了上面的基础,我们就可以构造请求了 然后对获取到的响应反序列化,这样就获取到了json格式的 ...
随机推荐
- ABP从入门到精通(5):.扩展国际化语言资源
ABP的有些组件使用的该组件自带的语言包资源,所以在有些时候会因为我们当前使用的语言对应的语言包不全,而造成日志一直记录WARN.ABP给我们提供了扩展语言包资源的接口,可以解决这个问题. 以下示例代 ...
- 线程池ThreadPoolExecutor整理
项目用到线程池,但是其实很多人对原理并不熟悉 ,这里只是整理一下 ThreadPoolExecutor java.uitl.concurrent.ThreadPoolExecutor类是线程池中最核心 ...
- sqli-labs less 5-6
sqli-labs less 5-6 从源代码中可以看到,运行返回结果正确的时候只返回you are in....,不会返回数据库当中的信息了,以前的union联合查询就不能用了,开始尝试盲注. 简单 ...
- Linux系统本地yum源环境配置记录
由于IDC的一些服务器没有外网,不能对外访问.所以打算部署一套内网的yum源环境,以供内网服务器使用.以下简单记录下操作过程: 1)下载centos6.9和centos7.3的镜像,并挂载 [root ...
- 【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 ...
- Linux内核分析——进程的切换和系统的一般执行过程
进程的切换和系统的一般执行过程 一.进程切换的关键代码switch_to分析 (一)进程调度与进程调度的时机分析 1.不同类型的进程有不同的调度需求 第一种分类: (1)I/O-bound:频繁进行I ...
- Linux内核设计期中总结
Linux内核设计期中总结 ● 知识点 一.计算机是如何工作的 计算机是按照冯·诺依曼存储程序的原理. 在执行程序时须先将要执行的相关程序和数据放入内存储器中,在执行程序时CPU根据当前程序指针寄存器 ...
- 防止重复提交demo
利用session防止重复提交 思路: 前端控制:在点击提交按钮后设置按钮不可用. 后台控制:利用session,在初次进入表单页面的时候前生成一个随机token,将token保存到session并返 ...
- SE Springer小组之《Spring音乐播放器》可行性研究报告五、六
5 可选择的其他系统方案 曾经考虑过制作闹钟系统,但考虑到闹钟系统在电脑应用中极其不实用,所以此方案未通过. 6 投资及效益分析 6.1支出 本软件只用于完成课程学习要求,不用做商用,无基础设备等支出 ...
- 无限级结构SQL查询所有的下级和所有的下级
Id,PId无限级结构,查询某个Id的所有下级或所有上级,使用WITH AS查询 查找Id为1所有的下级 /*查找Id为1所有的下级*/ WITH T AS( SELECT Id,PId,Name,0 ...