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. Boost线程处理机制

    采自文章:https://www.cnblogs.com/renyuan/p/6613638.html 大多数共享数据的线程均采用 boost::mutex mtx; boost::condition ...

  2. 【分析笔记】全志 i2c-sunxi.c 控制器驱动分析

    分析平台:全志 A64 内核版本:Linux 4.9 数据手册:Allwinner_A64_User_Manual_V1.1.pdf (whycan.com) 驱动框架 I2C 设备驱动 作为方案应用 ...

  3. Java8Stream流2

    上期对stream流大致总结了一下,后面又做了一些练习,大家可以参考一下. 首先需要建一个 Product的实体类,后面会用到 @Data @AllArgsConstructor @NoArgsCon ...

  4. 洛谷 P3137 [USACO16FEB]Circular Barn S

    题目链接 本蒟蒻的第一篇题解,写得不好请指出,敬请谅解 题意: 有\(n\)头奶牛,分布在一些房间,某些房间可能有多头牛,要让这些牛按顺时针移动,求使每一个房间刚好有一个奶牛的最小花费 花费计算:如果 ...

  5. mysql19-锁

    1.什么是锁 锁是计算机协调多个进程或线程并发访问某一资源的机制.在数据库中,除传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供许多用户共享的资源.如何保证数据并发访问的一致性. ...

  6. easyUI实现查询条件传递给后端并自动刷新表格的两种方法

    easyUI实现查询条件传递给后端并自动刷新表格的两种方法 用ajax的post函数传递参数,再通过loadData方法将数据初始化到表格中 js代码: //根据id搜索 $("#stand ...

  7. E - 树状数组 1【GDUT_22级寒假训练专题五】

    E - 树状数组 1 原题链接 题意 已知一个数列,你需要进行下面两种操作: 将某一个数加上 \(x\) 求出某区间每一个数的和 lowbit函数 定义一个函数\(f=lowbit(x)\),这个函数 ...

  8. Redis 源码解读之逐出策略

    Redis 源码解读之逐出策略 背景和问题 本文想解决的问题: redis 触发逐出的时机是怎样的? redis 逐出策略有哪些? 如何在海量的 key 中快速找到逐出评价值(idle)最高的key, ...

  9. 基于C++的OpenGL 10 之光照贴图

    1. 引言 本文基于C++语言,描述OpenGL的光照贴图 前置知识可参考: 基于C++的OpenGL 09 之材质 - 当时明月在曾照彩云归 - 博客园 (cnblogs.com) 笔者这里不过多描 ...

  10. xr32f429开发环境搭建

    XR32是全志科技的一款MCU芯片,基本参数如下所示: 环境的搭建首先是下载芯片对应的资料和手册(QQ群723687715)软硬件资料 官网工具下载:注册全志服务平台 下载无线连接工具和无线MCU 工 ...