Python版本 3.6

简单写一个爬虫,在写的过程熟悉Python语法,不得不说Python用起来真666;

  代码功能是访问网站首页将所有a标签值作为文件夹,将当前网页所有图片下载对应文件夹中;其实还有很多很多需要修改和完善的地方 比如异常,多线程,递归等;以后有机会再说吧.欢迎拍砖

 1 # -*- UTF-8 -*-
2 from urllib import request
3 from bs4 import BeautifulSoup
4 import os
5 import time, threading
6
7
8 exe_Count = 1
9 aList = []
10
11 def CallView(url, timeout, directoryPath,exe_count):
12 try:
13 listAvalue = []
14 headers = {
15 "User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/50.0.2661.102 UBrowser/6.1.2716.5 Safari/537.36",
16 "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8"
17 }
18 rep = request.Request(url, headers=headers)
19 response = request.urlopen(rep, timeout=timeout)
20 soup = BeautifulSoup(response)
21 # 获取a标签href 属性并写入list
22 for a in soup.find_all("a"):
23 if a.string is None:
24 continue
25 if not a.attrs["href"].strip() in aList:
26 aList.append(a.attrs["href"].strip())
27 listAvalue.append([a.string.strip()[0:11], a.attrs["href"].strip()])
28 else:
29 continue
30 # 创建不存在的目录
31 if not os.path.exists(directoryPath):
32 os.mkdir(directoryPath)
33 print("新目录:" + directoryPath)
34 # 开启线程递归
35 thread = threading.Thread(target=ForRequest, args=(listAvalue, timeout, directoryPath,exe_count))
36 thread.start()
37 listImgSrc = []
38 # 获取img标签 并下载
39 for img in soup.find_all("img"):
40 try:
41 imgSrc = img.attrs["src"]
42 print(imgSrc)
43 # 过滤重复src
44 if not imgSrc in listImgSrc:
45 listImgSrc.append(imgSrc)
46 # 读取图片
47 rep = request.Request(imgSrc)
48 response = request.urlopen(rep, timeout=timeout)
49 # 写入图片
50 filepath = directoryPath + "/" + imgSrc.split('/')[len(imgSrc.split('/')) - 1]
51 with open(filepath, "wb") as o:
52 o.write(response.read())
53 except:
54 print("访问图片或者写入本地Error")
55 except request.HTTPError as e:
56 print(e.code)
57 except:
58 print("CallView Error")
59
60
61 def ForRequest(listA, timeout, directoryPath,exe_count):
62 print("当前已执行:" + str(exe_count) + " 次")
63 #调用次数超过200跳出
64 if exe_count == 2:
65 thread = threading.current_thread()
66 raise SystemError("正在停止线程")
67 else:
68 exe_count = exe_count + 1
69
70 for info in listA:
71 directoryChildPath = directoryPath + "/" + info[0]
72 if not os.path.exists(directoryChildPath):
73 os.mkdir(directoryChildPath)
74 CallView(info[1], timeout, directoryChildPath, exe_count)
75
76 try:
77 print("爬虫开始活动了")
78 CallView("http://www.xxxxx.com", 5000, "D:/PythonTest/Img/素材公社",exe_Count);
79 print("爬虫正在偷偷活动,不要着急哦!")
80 except:
81 print("Error")

Python3.6多线程爬虫的更多相关文章

  1. 【python3两小时快速入门】入门笔记03:简单爬虫+多线程爬虫

    作用,之间将目标网页保存金本地 1.爬虫代码修改自网络,目前运行平稳,博主需要的是精准爬取,数据量并不大,暂未加多线程. 2.分割策略是通过查询条件进行分类,循环启动多条线程. 1.单线程简单爬虫(第 ...

  2. python多线程爬虫设计及实现示例

    爬虫的基本步骤分为:获取,解析,存储.假设这里获取和存储为io密集型(访问网络和数据存储),解析为cpu密集型.那么在设计多线程爬虫时主要有两种方案:第一种方案是一个线程完成三个步骤,然后运行多个线程 ...

  3. Python多线程爬虫与多种数据存储方式实现(Python爬虫实战2)

    1. 多进程爬虫 对于数据量较大的爬虫,对数据的处理要求较高时,可以采用python多进程或多线程的机制完成,多进程是指分配多个CPU处理程序,同一时刻只有一个CPU在工作,多线程是指进程内部有多个类 ...

  4. 多线程爬虫Miner

    多线程爬虫Miner 需要配置项:1.URL包含关键字.2.存储方式:DB-数据库存储;FILE-文件存储.3.爬取页面最大深度.4.下载页面线程数.5.分析页面线程数.6.存储线程数. ------ ...

  5. python爬虫入门(四)利用多线程爬虫

    多线程爬虫 先回顾前面学过的一些知识 1.一个cpu一次只能执行一个任务,多个cpu同时可以执行多个任务2.一个cpu一次只能执行一个进程,其它进程处于非运行状态3.进程里包含的执行单元叫线程,一个进 ...

  6. [原创]一款小巧、灵活的Java多线程爬虫框架(AiPa)

    1.简介 AiPa 是一款小巧,灵活,扩展性高的多线程爬虫框架. AiPa 依赖当下最简单的HTML解析器Jsoup. AiPa 只需要使用者提供网址集合,即可在多线程下自动爬取,并对一些异常进行处理 ...

  7. python多线程爬虫+批量下载斗图啦图片项目(关注、持续更新)

    python多线程爬虫项目() 爬取目标:斗图啦(起始url:http://www.doutula.com/photo/list/?page=1) 爬取内容:斗图啦全网图片 使用工具:requests ...

  8. 抓包分析、多线程爬虫及xpath学习

    1.抓包分析 1.1 Fiddler安装及基本操作 由于很多网站采用的是HTTPS协议,而fiddler默认不支持HTTPS,先通过设置使fiddler能抓取HTTPS网站,过程可参考(https:/ ...

  9. 【Python爬虫实战】多线程爬虫---糗事百科段子爬取

    多线程爬虫:即程序中的某些程序段并行执行,合理地设置多线程,可以让爬虫效率更高糗事百科段子普通爬虫和多线程爬虫分析该网址链接得出:https://www.qiushibaike.com/8hr/pag ...

  10. Python爬虫开发【第1篇】【多线程爬虫及案例】

    糗事百科爬虫实例: 地址:http://www.qiushibaike.com/8hr/page/1 需求: 使用requests获取页面信息,用XPath / re 做数据提取 获取每个帖子里的用户 ...

随机推荐

  1. FAQ 关于pip你应该知道的一些技巧

    pip简介 pip是安装了python之后的一个应用程序,包管理程序,有点类似于yum.npm.apt等工具 物理位置一般是python.exe所在目录下的scripts下 以我为例,我Python安 ...

  2. 线程、GIL、协程

    1.多进程实现TCP服务端并发 1.之前我们学习了一个服务端对应一个客户端的操作,但是我们无法实现一个服务端对应多个客户端的操作.因此我们需要在pycharm的右上角点击倒三角,选择Edit Conf ...

  3. Sentry 后端云原生中间件实践 ClickHouse PaaS ,为 Snuba 事件分析引擎提供动力

    目录(脑图) ClickHouse PaaS 云原生多租户平台(Altinity.Cloud) 官网:https://altinity.cloud PaaS 架构概览 设计一个拥有云原生编排能力.支持 ...

  4. spring-in-action-day05-REST

    1.创建RESTFUL端点 (1)创建get端点 (2)创建post端点 (3)创建put/patch端点 (4)创建delete端点 2.启用超媒体 3.消费REST端点 3.1使用RestTemp ...

  5. Jest + React 单元测试最佳实践

    我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 前言 单元测试是一种用于测试"单元"的软件测试方 ...

  6. eigen的简单用法汇总

    Eigen帮助文档的地址:http://eigen.tuxfamily.org/dox/pages.html Eigen的论坛:http://forum.kde.org/viewforum.php?f ...

  7. day15-SpringMVC执行流程

    SpringMVC执行流程 1.SpringMVC执行流程分析图 例子 (1)创建 HaloHandler package com.li.web.debug; import org.springfra ...

  8. Excel文件 利用MySQL/Python 实现自动处理数据的功能

    目录 问题描述: 解决方案: 一.SQL查询 二.SQL.python处理 三.python处理 四.优化python处理 1.手动执行代码 2.开机自动执行代码 对比四种方案: 总结: 问题描述: ...

  9. 自己从零写操作系统GrapeOS——1.GrapeOS介绍

    为了学习操作系统原理我自己写了一个简单的操作系统,取名叫GrapeOS. GrapeOS是一个x86多任务桌面操作系统,但非常简单,代码只有4千行. 下面我来简单介绍一下GrapeOS的功能. 1.桌 ...

  10. ASAS-CoMoSpA研究: 评价SpA不同分类标准的表现

    ASAS-CoMoSpA研究: 评价SpA不同分类标准的表现 EULAR2015; PresentID: OP0037 THE PERFORMANCE OF DIFFERENT CLASSIFICAT ...