Python3.6多线程爬虫
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多线程爬虫的更多相关文章
- 【python3两小时快速入门】入门笔记03:简单爬虫+多线程爬虫
作用,之间将目标网页保存金本地 1.爬虫代码修改自网络,目前运行平稳,博主需要的是精准爬取,数据量并不大,暂未加多线程. 2.分割策略是通过查询条件进行分类,循环启动多条线程. 1.单线程简单爬虫(第 ...
- python多线程爬虫设计及实现示例
爬虫的基本步骤分为:获取,解析,存储.假设这里获取和存储为io密集型(访问网络和数据存储),解析为cpu密集型.那么在设计多线程爬虫时主要有两种方案:第一种方案是一个线程完成三个步骤,然后运行多个线程 ...
- Python多线程爬虫与多种数据存储方式实现(Python爬虫实战2)
1. 多进程爬虫 对于数据量较大的爬虫,对数据的处理要求较高时,可以采用python多进程或多线程的机制完成,多进程是指分配多个CPU处理程序,同一时刻只有一个CPU在工作,多线程是指进程内部有多个类 ...
- 多线程爬虫Miner
多线程爬虫Miner 需要配置项:1.URL包含关键字.2.存储方式:DB-数据库存储;FILE-文件存储.3.爬取页面最大深度.4.下载页面线程数.5.分析页面线程数.6.存储线程数. ------ ...
- python爬虫入门(四)利用多线程爬虫
多线程爬虫 先回顾前面学过的一些知识 1.一个cpu一次只能执行一个任务,多个cpu同时可以执行多个任务2.一个cpu一次只能执行一个进程,其它进程处于非运行状态3.进程里包含的执行单元叫线程,一个进 ...
- [原创]一款小巧、灵活的Java多线程爬虫框架(AiPa)
1.简介 AiPa 是一款小巧,灵活,扩展性高的多线程爬虫框架. AiPa 依赖当下最简单的HTML解析器Jsoup. AiPa 只需要使用者提供网址集合,即可在多线程下自动爬取,并对一些异常进行处理 ...
- python多线程爬虫+批量下载斗图啦图片项目(关注、持续更新)
python多线程爬虫项目() 爬取目标:斗图啦(起始url:http://www.doutula.com/photo/list/?page=1) 爬取内容:斗图啦全网图片 使用工具:requests ...
- 抓包分析、多线程爬虫及xpath学习
1.抓包分析 1.1 Fiddler安装及基本操作 由于很多网站采用的是HTTPS协议,而fiddler默认不支持HTTPS,先通过设置使fiddler能抓取HTTPS网站,过程可参考(https:/ ...
- 【Python爬虫实战】多线程爬虫---糗事百科段子爬取
多线程爬虫:即程序中的某些程序段并行执行,合理地设置多线程,可以让爬虫效率更高糗事百科段子普通爬虫和多线程爬虫分析该网址链接得出:https://www.qiushibaike.com/8hr/pag ...
- Python爬虫开发【第1篇】【多线程爬虫及案例】
糗事百科爬虫实例: 地址:http://www.qiushibaike.com/8hr/page/1 需求: 使用requests获取页面信息,用XPath / re 做数据提取 获取每个帖子里的用户 ...
随机推荐
- GPS定位解决偏差
目录 GPS定位解决偏差 开篇 实践 1.解决思路以及步骤 2.实践出真理! 3.上坐标系之间的代码. 希望大家:点赞,留言,关注咯~ 唠家常 今日推荐都在文章中了 GPS定位解决偏差 开篇 大家都知 ...
- 软工综合实践课设——员工招聘系统(参考BOSS直聘);Pyhton实现
应用背景: 随着科学技术的发展,岗位数量越来越多,特别是每逢毕业季找工作的人数也很多,如果人们找工作或者企业招人靠纯手工的话,费时费力,仅仅是筛选简历和费劲,并且员工找工作投简历可能得需要克服时间和空 ...
- 六、python基础知识之变量常量、索引取值和PEP8规范
目录 一.变量与常量 1.什么是变量? 2.什么是常量? 变量的基本使用 变量使用的语法结构与底层原理 变量名的命名规范和命名风格 变量的命名风格 常量的基本使用 二.索引取值 三.PEP8规范 1. ...
- Time Series Analysis (Best MSE Predictor & Best Linear Predictor)
Time Series Analysis Best MSE (Mean Square Error) Predictor 对于所有可能的预测函数 \(f(X_{n})\),找到一个使 \(\mathbb ...
- KingbaseES dblink异常unsupported for database link
KingbaseES使用dblink查询报错:unsupported for database link 适用于: KingbaseES所有版本. 问题现象: KingbaseES创建kingbase ...
- springBoot集成flowable
前言 Flowable可以十分灵活地加入你的应用/服务/构架.可以将JAR形式发布的Flowable库加入应用或服务,来嵌入引擎. 以JAR形式发布使Flowable可以轻易加入任何Java环境:Ja ...
- Ajax局部修改页面使用html()内置标签
今天在写javaweb项目时遇到的一个小问题,在Ajax修改页面时,需要修改一串文字同时部分修改样式, 在对比了text()和html()后,在此记录 text:(无法内嵌标签) html:(可以内嵌 ...
- DESIR队列研究: 早期SpA患者骶髂关节放射学结构损伤的不同定义对结构损伤变化的敏感性
DESIR队列研究: 早期SpA患者骶髂关节放射学结构损伤的不同定义对结构损伤变化的敏感性 EULAR2015; PresentID: THU0356 SENSITIVITY TO CHANGE OF ...
- rem自动计算
写法一: //rem自动计算 (function (designWidth, maxWidth, viewWidth) { var doc = document, win = window, docE ...
- Flutter:StatefulWidget 怎么传参
定义好一个有状态(或无状态)的组件之后,需要为其传递一些参数,希望组件能够更加灵活使用.那么,在 Flutter 中如何为其传递参数呢? 以下是 StatefulWidget 传递值的步骤,一共三步: ...