抓取整个网站图片的爬虫

news/2024/5/17 16:42:56/文章来源:https://blog.csdn.net/weixin_34356555/article/details/91567896

为什么80%的码农都做不了架构师?>>>   hot3.png

写了一个抓取http://www.youwu.cc/index.html整个网站图片的爬虫,使用redis去重和任务队列,这样可以避免递归,我不能保证你看到的时候还能够使用,人家网站也会反爬虫的,代码如下,非常直白

# -*- coding:utf-8 -*-
"""
python collect_images.py http://www.youwu.cc/index.html
"""
import os
import sys
import json
import urllib2
import redis
import urlparse
import requests
import traceback
from copy import deepcopy
from lxml import etreeHEADERS = {'User-Agent': 'Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.6) Gecko/20091201 Firefox/3.5.6',
}class Queue:def __init__(self):self.list_name = 'task'self._redis_conn = redis.Redis()def put(self, task):self._redis_conn.lpush(self.list_name, task)def get(self):return self._redis_conn.brpop(self.list_name, timeout=60)class DedupMap:def __init__(self):self.set_name = 'visited'self._redis_conn = redis.Redis()def first_visit(self, element):return self._redis_conn.sadd(self.set_name, element)def retry(self, element):self._redis_conn.srem(self.set_name, element)TASK_QUEUE = Queue()  # 网页任务调度,redis队列
DEDUP_MAP = DedupMap()  # 网页去重, redis集合
FILTER = {'href': lambda x: True,'src': lambda x: True,
}def dn_of_url(url):return urlparse.urlparse(url).netlocdef ensure_dir(path):if not os.path.exists(path):os.mkdir(path)def full_path(href, refer):parse = urlparse.urlparse(refer)if href.startswith('http://') or href.startswith('https://'):rtv = hrefelif href.startswith('/'):rtv = '%s://%s%s' % (parse.scheme, parse.netloc, href)elif href.startswith('#'):query = '?' + parse.query if parse.query else ''rtv = '%s://%s%s%s%s' % (parse.scheme, parse.netloc, parse.path, query, href)elif href.startswith('?'):rtv = '%s://%s%s%s' % (parse.scheme, parse.netloc, parse.path, href)elif href.startswith('javascript'):rtv = referelse:rtv = '%s://%s%s' % (parse.scheme, parse.netloc, os.path.join(os.path.dirname(parse.path), href))return rtvdef extract_src_list(text):if not text:return []tree = etree.HTML(text)return tree.xpath('//img/@src')def extract_href_list(text):if not text:return []tree = etree.HTML(text)return tree.xpath('//a/@href')def get_html_content(url, headers):response = requests.get(url, headers=headers)if response.status_code == 200:return response.textdef get_image_content(url, headers):request = urllib2.Request(url=url, headers=headers)socket = urllib2.urlopen(request)if socket.code == 200:return socket.read()def get_next_urls(url, html):"""html是HTTP请求url获得的内容"""href_list = [full_path(href, url) for href in extract_href_list(html)]src_list = [full_path(src, url) for src in extract_src_list(html)]return href_list, src_listdef download_img(url, headers):path = os.path.join(os.path.dirname(__file__), os.path.basename(os.path.dirname(url)))ensure_dir(path)file_name = os.path.join(path, os.path.basename(url))if os.path.exists(file_name):return Falsecontent = get_image_content(url, headers)if content:with open(file_name, 'wb') as fp:fp.write(content)return Truedef deep_crawl(url, headers):print 'GET HTML:', urlhtml = get_html_content(url, headers)href_list, src_list = get_next_urls(url, html)for src in src_list:try:if FILTER['src'](src):succeed = download_img(src, headers)if succeed:print 'OK down: ', srcexcept BaseException as e:print 'ERROR down: ', srcraise eheaders = deepcopy(HEADERS)headers['Referer'] = urlfor href in href_list:if FILTER['href'](href) and DEDUP_MAP.first_visit(href):TASK_QUEUE.put(json.dumps({'url': href, 'headers': headers}))def main(index_url):FILTER['href'] = lambda x: dn_of_url(index_url) in xFILTER['src'] = lambda x: dn_of_url(index_url) in xheaders = deepcopy(HEADERS)headers['Referer'] = index_urlTASK_QUEUE.put(json.dumps({'url': index_url, 'headers': headers}))while True:task = TASK_QUEUE.get()if not task:breakelse:task = json.loads(task[1])try:deep_crawl(task['url'], task['headers'])except BaseException as e:  # 失败的时候把它重新放回去print 'PUT BACK:', taskTASK_QUEUE.put(json.dumps(task))print traceback.format_exc()raise eif __name__ == '__main__':if len(sys.argv) < 2:print sys.argv[0], 'url'else:main(sys.argv[1])

转载于:https://my.oschina.net/rst/blog/1478560

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_818357.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

震惊:2/3 被黑的网站隐藏着后门

导读网络安全公司 Sucuri 的安全专家表示&#xff0c;他们在调查中发现有 68% 的被黑网站存在着隐藏的后门backdoor脚本。这些后门脚本会给***者提供再次进入秘密通道&#xff0c;即便系统管理员改变了口令或应用了安全补丁&#xff0c;只要没有完全的清理整个系统&#xff0c;…

大型网站技术架构(一)大型网站架构演化

2019独角兽企业重金招聘Python工程师标准>>> 看完了有一本书&#xff0c;就应该有所收获&#xff0c;有所总结&#xff0c;最近把《大型网站技术架构》一书给看完了&#xff0c;给人的印象实在深刻&#xff0c;再加上之前也搞过书本上讲的反向代理和负载均衡以及ses…

在家访问校内服务器上的网站,寒假马上来了,北邮为例如何在家如何连接校内服务器并让服务器保持联网状态...

寒假马上就要来了&#xff0c;一想到回家之后就没法用学校配好的分布式环境就有点郁闷。于是乎找寻下办法让在家也能连学校的校内网。以北京邮电大学为例&#xff0c;学校内上网都是网络流量计费&#xff0c;因此想要联网必须先到10.3.8.211登陆&#xff0c;并输入自己学号密码…

apache网站访问慢的实践处理过程

一、故障描述 客户业务是基于LAMP架构的php站点&#xff0c;由于每秒钟访问量在230左右&#xff0c;导致了用户的网站访问很缓慢&#xff0c;打开时间在11秒左右&#xff0c;严重影响了业务和客户体验度。 二、排查过程 2.1 从服务器系统方面考虑&#xff1a;CPU、内存、IO、网…

国外网站高端大气的全屏效果插件fullpage

如今我们经常能见到全屏网站&#xff0c;尤其是国外网站。这些网站用几幅很大的图片或色块做背景&#xff0c;再添加一些简单的内容&#xff0c;显得格外的高端大气上档次。比如 iPhone 5C 的介绍页面&#xff08;查看&#xff09;&#xff0c;QQ浏览器的官网站。如果你也希望你…

动态修改服务器配置文件,nuxt 服务器渲染动态设置 title和seo关键字的操作

使用如下钩子即可&#xff0c;但是前提条件是 没有默认配置head的titleasyncData ({ app }, callback) {app.head.title ‘new title"callback(null, {})},补充知识&#xff1a;vue 每个页面动态切换title keywords description (seo的设置)最近接触到需要使用到Seo,要求…

易语言 html服务器,易网站群引擎打造最强易语言WEB服务器(内含演示例子源码)...

.版本 2.程序集 易网站群, , 公开.子程序 断开访客, 逻辑型, 公开.参数 访客句柄, 整数型.子程序 发送不存在, 逻辑型, 公开, 404页面.参数 访客句柄, 整数型.参数 页面内容, 字节集, 可空.参数 要求断开, 逻辑型, 可空, 默认为假&#xff1a;不断开.参数 主动断开, 逻辑型, 可…

SEO难做与否,七步SEO优化策略带你快速超越同行...

伴随着电商的快速发展越来越多的人加入到SEO行业&#xff0c;导致很多没有完全掌握SEO技术的朋友感到苦恼&#xff0c;经常会听到说现在SEO越来越不好做了&#xff0c;正因为做的人数多&#xff0c;导致SEO优化竞争的难度加大&#xff0c;几年前大多数人都不懂SEO&#xff0c;加…

三、大型网站核心架构要素

为什么80%的码农都做不了架构师&#xff1f;>>> &#xff08;1&#xff09;性能&#xff1a; 浏览器端&#xff1a;通过浏览器缓存、使用页面压缩、合理布局页面、减少Cookie传输等手段改善性能。CDN、反向代理服务器。 应用服务器端&#xff1a;本地缓存、分…

如何通过SEO工具提升网站排名

如何通过SEO软件工具提升网站排名:网站跳出率高是海南网站优化哪些原因导致?如果网站跳出率80%&#xff0c;企业站&#xff0c;商品站的话&#xff0c;满足基础优化&#xff0c;用户需求的站会放到前20位。网站首页没有太大的吸引力。任何小的数据都要精准锁定&#xff0c;借助…

没时间解释了快上车!0.04折老司机建站节福利来了

CNNIC日前发布第39次统计报告称&#xff0c;国内网站去年增速高达14.1%。这意味着2016年&#xff0c;我国网站数量增长大约60万&#xff0c;网站作为企业信息化的基础迎来再次爆发。业内人士认为&#xff1a;H5自助建站迎来了最好的发展时机&#xff0c;“苦逼这么多年的建站行…

0.04折老司机建站节福利来了,没时间解释了快上车!

CNNIC日前发布第39次统计报告称&#xff0c;国内网站去年增速高达14.1%。这意味着2016年&#xff0c;我国网站数量增长大约60万&#xff0c;网站作为企业信息化的基础迎来再次爆发。业内人士认为&#xff1a;H5自助建站迎来了最好的发展时机&#xff0c;“苦逼这么多年的建站行…

服务器只能两个端口访问网站,一个服务器放两个网站端口设置

一个服务器放两个网站端口设置 内容精选换一换场景举例在同一个VPC内&#xff0c;用户需要将某个安全组内一台裸金属服务器上的资源拷贝到另一个安全组内的裸金属服务器上时&#xff0c;可以将两台裸金属服务器设置为内网互通后再拷贝资源。在同一个VPC内&#xff0c;用户需要将…

网站性能评测实验

实验内容 本实验的目的是利用主流的网站分析工具对Alexatop100的前5名网站进行分析&#xff0c;评价其网站性能。在本实验中&#xff0c;我将在Windows平台下进行实验&#xff0c;评测的网站是目前Alexatop 100 的前5名的网站&#xff0c;包括google.com, Facebook.com, Youtu…

UseOfMethods - 方法的使用 - Java

文章目录什么是方法&#xff1f;方法就是一个代码片段. 类似于 C 语言中的 "函数".方法可以理解为是一个 功能&#xff0c;实现某种我们想要达到的效果&#xff0c;而且这个功能是可以被重复使用的。方法存在的意义(不要背, 重在体会):方法的语法格式代码实例1&#…

听说,有些网站明文存储用户密码?

前段时间爆出 Facebook 明文存储用户密码&#xff0c;多达 6 亿用户&#xff0c;而它的用户总数是 27 亿&#xff0c;占比 22 % 。 看到这个消息&#xff0c;是不是很震惊? 无独有偶&#xff0c;之前有听过很多银行系统的密码也是明文&#xff08;真假没有验证&#xff09;。…

一个因pid文件丢失,nginx的进程起不来,网站页面无法访问的故事

问题描述&#xff1a; 公司的一个网站首页突然打不开&#xff0c;使用域名访问&#xff0c;页面一片空白。使用IP端口 访问&#xff0c;界面只能看到几个蓝色的标题&#xff0c;没有图片&#xff0c;排版混乱。 分析解决&#xff1a; 1、查看部署官网的nginx进程&#xff0c;进…

网站至今已停超过24小时,郁闷中...

最早想用一卡通来付钱&#xff0c;忘了把证书带在身边&#xff0c;网上银行使用不了了退而求其次&#xff0c;申请支付卡&#xff0c;被银行的人问了一堆的问题&#xff0c;很多天长地久谁能记得那么清楚&#xff0c;失败。再求其次&#xff0c;用别人的卡付帐&#xff0c;谁知…

快速在Ubuntu安装PHP网站

快速安装使用的是tasksel&#xff0c;tasksel是Debian / Ubuntu的工具&#xff0c;安装多个相关软件包作为一个协调的“任务”到你的系统。这个lamp-server^跟taskel这个程序有关。下面是详细步骤&#xff1a; 一、升级当前Linux环境 这里我采用UBUNTU发行版本&#xff0c;需要…

云服务器 ECS 搭建WordPress网站:购买域名

购买域名您可以给自己的网站设定一个单独的域名。您的用户可以使用易记的域名访问您的网站&#xff0c;而不需要使用复杂的 IP 地址。 建议通过 阿里云购买域名。 操作步骤 1.在购买域名页面&#xff0c;搜索想用的域名&#xff0c;如尚未被注册&#xff0c;则可以购买。选择要…