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. XAMPP-Apache-解决跨域

    很 意外啊,我这篇文章竟然说因为有广告,所以审核不通过.牛逼,我接着发,我看哪来的广告.审核有广告是NT技术写的逻辑,还是没脑子的审核员审核的. 因为在做项目的时候,会有很多项目要进行热更测试,可有些 ...

  2. vue学习笔记(一)---- vue指令(在vue中使用样式的方式)

    认真学习,认真记录,每天都要有进步呀!!! 加油叭!!! 一.在vue中使用样式的方式: 1. 直接传递一个数组,注意: 这里的 class 需要使用 v-bind 做数据绑定 <style&g ...

  3. ASP.NET Core - IStartupFilter 与 IHostingStartup

    1. IStartupFilter   上面讲到的方式虽然能够根据不同环境将Startup中的启动逻辑进行分离,但是有些时候我们还会可以根据应用中的功能点将将一系列相关中间件的注册封装到一起,从 St ...

  4. VUE16 检测数据变化的原理

    部分转自:https://www.vue-js.com/topic/6129d7d661c8f900316ae37a 1 简介 Vue采用MVVM(数据驱动视图)的模式,去充当MVVM中的VM层,在数 ...

  5. 源码下载teb

    git clone https://github.com/rst-tu-dortmund/teb_local_planner.git git checkout <ros版本分支> git ...

  6. 学习Java Day21

    今天学习了静态导入,可以导入静态方法和静态字段

  7. grequest案例对比requests案例

    grequets和requests案例各一个,使用上对比: import grequests import requests headers = { "content-type": ...

  8. 前后端分离项目创建项目详细过程项、目需求分析、pip换源、创建虚环境、后端目录调整以及解决问题

    引言,本项目是前后端分离的,前端用Vue2 后端用Django,后台管理部分是通过simpleUI完成的项目,项目名称为路飞,是商城类(知识付费项目).本篇文章主要讨论一个前后端分离的项目第一步怎么做 ...

  9. Bypass disable_functions 食用方法

    Bypass disable_functions 食用方法 目录 Bypass disable_functions 食用方法 1 上传Payload 2 直接使用sh反弹shell 3 上传 Payl ...

  10. Java Agent场景性能测试分析优化经验分享

    摘要:本文将以Sermant的SpringBoot 注册插件的性能测试及优化过程为例,分享在Java Agent场景如何进行更好的性能测试优化及在Java Agent下需要着重注意的性能陷阱. 作者: ...