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 做数据提取 获取每个帖子里的用户 ...
随机推荐
- Selenium CHANGELOG[最新版本4.8.0 计划中]
Selenium CHANGELOG[持续更新] 源文件 https://github.com/SeleniumHQ/selenium/blob/trunk/py/CHANGES 搬运工 对重点版本做 ...
- SpringBoot 2.x 在Tomcat8上无法运行,报无法访问错误
非法访问:此Web应用程序实例已停止.无法加载[].为了调试以及终止导致非法访问的 这仅是我的一个Filter重写的时候没有重写他的其他两个方法,导致我在Tomcat8上不能运行,但在Tomcat9上 ...
- 4.12 疫情数据可视化 毕设(初稿版 crud+可视化echarts
4.22 完成地图 数据可视化~~~ 599x150 解决不显示图片的问题 参考文档 https://blog.csdn.net/qq_51917985/article/details/121380 ...
- 如何快速搭建 Maven私服Nexus【实践可行版】
搭建私服Nexus Nexus 一般用来搭建位于组织或公司内部的 Maven 私服,代理所有的仓库(包括中央仓库),用户通过它就可以获取和管理所有所需的 Maven 构件. Nexus 开源版具有以下 ...
- SpringMVC的类型转换器与RESTFUL集成
Spring Mvc自定义的数据类型转换器: 一:Date 1.创建DateConverter 类,并实现Converter接口:需要指定泛型<S,T> package com.south ...
- appium 在linux安装和使用(持续更新)
appium V1.10 centos7.4 安装 安装步骤 1. 安装node 为了得到npm(node package manager,nodejs的安装包管理工具,可以通过npm来下载appiu ...
- 【雅礼联考DAY01】数列
#include<cstdio> #include<map> using namespace std; typedef long long LL; const int N = ...
- uni-app:获取当前经纬度解决方案+如何布置全局组件
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.布置全局组件 在我们开发的过程中,会碰到一个现象,就是在页面里面引入组件,总算要写import,components才能引用,这里给大 ...
- CCRD_TOC_2015_EULAR专刊
中信国健风湿免疫临床通讯 EULAR2015专刊●目录 脊柱关节炎专题 OP0037 ASAS-CoMoSpA研究: 评价SpA不同分类标准的表现 OP0170 NSAIDs以优化剂量治疗中轴型SpA ...
- 04#Web 实战:Gitee 贡献图
前言 这次要做的 Web 前端实战是一个 Gitee 个人主页下的贡献图(在线 Demo),偶尔做一两个,熟悉熟悉 JS 以及 jQ.整体来说这个案例并不难,主要是控制第一个节点以及最后一个节点处于星 ...