python爬虫

爬虫数据结构

陌路散爱 提交于 2020-03-31 08:35:12
一、多任务简介 1、为什么要使用多任务爬虫? 在大量的url需要请求时,单线程/单进程去爬取,速度太慢,此时cpu不工作,浪费cpu资源。 爬取与写入文件分离,可以规避io操作,增加爬取速度,充分利用cpu。 2、多任务分类 进程:进程是操作资源分配的最小单位,一个运行的程序,至少包括一个进程,进程之间数据不能共享。(利用多核) 线程:线程是cpu调度的最小单位,一个进程中至少含有一个线程,线程中数据是共享的,如果多个线程操作同一个对象时,需要考虑数据安全问题。(爬虫中最常用) 协程:协程位于线程内部,如果一个线程中运行的代码,遇到IO操作时,切换到线程其他代码执行(最大程度的规避IO操作) 2、如何提高程序的运行速度 1、提高CPU的利用率 假如我们的程序有只有一个线程,CPU就只处理这一个线程。如果在程序中遇到IO操作。此时CPU就不工作了。休息的这段时间,就浪费了CPU的资源。 若我们的程序是多线程的,CPU会在这多个任务之间切换,如果其中一个线程阻塞了,CPU不会休息,会处理其他线程。 2、增加CPU数量 一个CPU同一时间只能护理一个任务,若我们增加CPU数量,那么多个CPU处理多个任务,也会提升程序的运行速度,例如使用多进程。 二、python中的threading模块(开启多线程) cpython解释器下的 python中没有真正的多线程

python爬虫

廉价感情. 提交于 2020-03-30 20:54:21
   一、python模块 1、urllib.request常规使用 import urllib.request #1、指定URL url = 'http://www.baidu.com' #2、发起请求:urlopen可以根据指定的url发起请求,且返回一个响应对象 response = urllib.request.urlopen(url=url) #3、获取页面数据:read函数返回的就是响应对象中存储的页面数据(byte) response_text = response.read() #4、持久化存储 with open('./baidu.html','wb') as f: f.write(response_text) print('写入成功') urllib.request urllib.request处理url中文 import urllib.request import urllib.parse #1、指定URL # url = 'https://tieba.baidu.com/f?ie=utf-8&kw=你好&fr=search' url = 'https://tieba.baidu.com/f?ie=utf-8&kw=%s&fr=search' #url不可以存在非ascii编码的字符数据 wd = urllib.parse.quote("你好") new

爬虫的新手使用教程(python代理IP)

£可爱£侵袭症+ 提交于 2020-03-30 20:38:49
前言 Python爬虫要经历爬虫、爬虫被限制、爬虫反限制的过程。当然后续还要网页爬虫限制优化,爬虫再反限制的一系列道高一尺魔高一丈的过程。爬虫的初级阶段,添加headers和ip代理可以解决很多问题。 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取http://t.cn/A6Zvjdun 本人自己在爬取豆瓣读书的时候,就以为爬取次数过多,直接被封了IP.后来就研究了代理IP的问题. (当时不知道什么情况,差点心态就崩了...),下面给大家介绍一下我自己代理IP爬取数据的问题,请大家指出不足之处. 问题 这是我的IP被封了,一开始好好的,我还以为是我的代码问题了 思路: 从网上查找了一些关于爬虫代理IP的资料,得到下面的思路 爬取一些IP,过滤掉不可用. 在requests的请求的proxies参数加入对应的IP. 继续爬取. 收工 好吧,都是废话,理论大家都懂,上面直接上代码... 思路有了,动手起来. 运行环境 Python 3.7, Pycharm 这些需要大家直接去搭建好环境... 准备工作 爬取IP地址的网站(国内高匿代理) 校验IP地址的网站 你之前被封IP的py爬虫脚本... 上面的网址看个人的情况来选取 爬取IP的完整代码 PS:简单的使用bs4获取IP和端口号,没有啥难度,里面增加了一个过滤不可用IP的逻辑 关键地方都有注释了 import

Scrapy爬虫框架入门

北城以北 提交于 2020-03-30 15:42:29
目录 Scrapy爬虫框架入门 Scrapy概述 组件 数据处理流程 安装和使用Scrapy Scrapy爬虫框架入门 Scrapy概述 Scrapy是Python开发的一个非常流行的网络爬虫框架,可以用来抓取Web站点并从页面中提取结构化的数据,被广泛的用于数据挖掘、数据监测和自动化测试等领域。下图展示了Scrapy的基本架构,其中包含了主要组件和系统的数据处理流程(图中带数字的红色箭头)。 组件 Scrapy引擎(Engine):Scrapy引擎是用来控制整个系统的数据处理流程。 调度器(Scheduler):调度器从Scrapy引擎接受请求并排序列入队列,并在Scrapy引擎发出请求后返还给它们。 下载器(Downloader):下载器的主要职责是抓取网页并将网页内容返还给蜘蛛(Spiders)。 蜘蛛(Spiders):蜘蛛是有Scrapy用户自定义的用来解析网页并抓取特定URL返回的内容的类,每个蜘蛛都能处理一个域名或一组域名,简单的说就是用来定义特定网站的抓取和解析规则。 条目管道(Item Pipeline):条目管道的主要责任是负责处理有蜘蛛从网页中抽取的数据条目,它的主要任务是清理、验证和存储数据。当页面被蜘蛛解析后,将被发送到条目管道,并经过几个特定的次序处理数据。每个条目管道组件都是一个Python类,它们获取了数据条目并执行对数据条目进行处理的方法

爬虫之爬汽车之家

孤人 提交于 2020-03-29 00:55:21
一、话说爬虫   先说说爬虫,爬虫常被用来抓取特定网站网页的HTML数据,定位在后端数据的获取,而对于网站而言,爬虫给网站带来流量的同时,一些设计不好的爬虫由于爬得太猛,导致给网站来带很大的负担,当然再加上一些网站并不希望被爬取,所以就出现了许许多多的反爬技术。 二、 安装 模块 1. requests 模块安装方法: pip3 install requests 2、beautisoup模块 软件安装方法: pip3 install beautifulsoup4 或 pip3 install bs4 3、lxml模块 #必须先安装whell依赖 (请换成国内pip源进行安装,否则容易报错)pip install wheel #在cmd中,输入python进入python。 然后输入import pip;print(pip.pep425tags.get_supported()),界面上输出当前python的版本信息,如图。 再跟据上面查到的版本信息,找到下面对应的版本进行安装。 #下载地址:https://pypi.python.org/pypi/lxml/3.7.3 (网站打不开,请翻墙,就可以打开)#python3.5就选择cp3m版本 lxml-3.7.3-cp35-cp35m-win32.whl#安装方法pip3 install lxml-3.6.4-cp35-cp35m

Python爬虫获取斗鱼主播信息

廉价感情. 提交于 2020-03-27 19:01:27
3 月,跳不动了?>>> 感谢参考原文- http://bjbsair.com/2020-03-27/tech-info/7150/ 下面我们进入正题 首先 我们进入斗鱼的官网 我发现首页是一些推荐的主播,并不全面,不能全部爬取,所以我这里选择了分类页 分类页地址: https://www.douyu.com/directory 这里是斗鱼所以的直播分类,我们可以看到所有的分类全部都在这一页,所以我们只需要把每个分类的地址拿到。 在浏览器中按F12,我们看到 每个分类都是由 标签写的标签的class为unit,并且含有链接和文本 所有我们只需要 def main_wj(): r = requests.get(" https://www.douyu.com/directory ") #从分类目录读取所有分类的名字和链接地址 r.encoding = 'utf-8' soup = BeautifulSoup(r.text, 'html.parser') #美丽汤,用于html更加简便 urls = [] names = [] for link in soup.select('.unit '): #分类链接和名字的 class 是unit urls.append(link.select('a')[0]['href']) #添加链接到urls列表 names.append(link

Python之多线程爬虫抓取网页图片的示例代码

别说谁变了你拦得住时间么 提交于 2020-03-26 11:14:01
本篇文章主要介绍了Python之多线程爬虫抓取网页图片的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 目标 嗯,我们知道搜索或浏览网站时会有很多精美、漂亮的图片。 我们下载的时候,得鼠标一个个下载,而且还翻页。 那么,有没有一种方法,可以使用非人工方式自动识别并下载图片。美美哒。 那么请使用python语言,构建一个抓取和下载网页图片的爬虫。 当然为了提高效率,我们同时采用多线程并行方式。 思路分析 Python有很多的第三方库,可以帮助我们实现各种各样的功能。问题在于,我们弄清楚我们需要什么: 1)http请求库,根据网站地址可以获取网页源代码。甚至可以下载图片写入磁盘。 2)解析网页源代码,识别图片连接地址。比如正则表达式,或者简易的第三方库。 3)支持构建多线程或线程池。 4)如果可能,需要伪造成浏览器,或绕过网站校验。(嗯,网站有可能会防着爬虫 😉) 5)如果可能,也需要自动创建目录,随机数、日期时间等相关内容。 如此,我们开始搞事情。O(∩_∩)O~ 环境配置 操作系统:windows 或 linux 皆可 Python版本:Python3.6 ( not Python 2.x 哦) 第三方库 urllib.request threading 或者 concurrent.futures 多线程或线程池(python3.2+) re

Python爬虫连载17-ItemPipeLine、中间件

折月煮酒 提交于 2020-03-26 02:00:06
一、ItemPipeLine 1.爬虫提取出的数据存入item之后,item中保存的数据需要进一步处理,比如:清洗,去重,存储等 2.pipeline需要process_item函数 (1)process_item​:spider提出来的item作为参数出入,同时传入的还有spider;此方法是必须要实现的​;必须返回一个item对象,被丢弃的item不会被之后的pipeline处理 (2)__init__:构造函数 进行一些必要的参数初始化 (3)open_spider(spider) spider对象被开启的时候调用 (4)close_spider(spider) spider对象被关闭的时候调用 3.Spider (1)对应的是文件夹spiders下的文件 (2)__init__:初始化爬虫的名称,start_urls列表 (3)start_requests:生成Requests对象嫁给Scrapy下载并返回response (4)parse:根据返回的response解析出相应的item,item自动进入到pip​eline;如果需要,解析出url,url自动交给requests模块,一直循环下去 (5)start_request​:此方法仅能被调用一次,读取start_urls内容并启动循环过程 (6)​name:设置爬虫的名字 (7)start_urls

爬虫之Scrapy框架

≡放荡痞女 提交于 2020-03-26 01:59:43
框架:具有很强的通用性,且封装了一些通用实现方法的项目模板 scrapy (异步框架): 高性能的网络请求 高性能的数据解析 高性能的持久化存储 高性能的全站数据爬取 高性能的深度爬取 高性能的分布式 Scrapy环境安装 IOS和Linux pip install scrapy windows a. pip3 install wheel b. 下载twisted http://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted # Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whl; Python是3.5版本的就选择cp35下载 c. 进入下载目录,执行 pip3 install Twisted‑17.1.0‑cp35‑cp35m‑win_amd64.whl # 安装失败可能是这个文件的版本导致的,即使Python版本都是对的,可以重新下载一个32位的试试 # 还安装失败的话就下载其python版本的,总有一个能成功 d. pip3 install pywin32 e. pip3 install scrapy 安装完成后,输入``scrapy`测试一下,出现如下图显示,即安装成功。 Scrapy的基本使用 创建工程 scrapy startprojct proNmame cd proNmame

Python爬虫入门之三urllib库的基本使用

半腔热情 提交于 2020-03-25 20:54:35
前言 所谓网页抓取,就是把URL地址中指定的网络资源从网络流中读取出来,保存到本地。在Python中有很多库可以用来抓取网页,我们先学习urllib。 注:此博客开发环境为python3 urlopen 我们先来段代码: # urllib_urlopen.py # 导入urllib.request import urllib.request # 向指定的url发送请求,并返回服务器响应的类文件对象 response = urllib.request.urlopen("http://www.baidu.com") # 类文件对象支持 文件对象的操作方法,如read()方法读取文件全部内容,返回字符串 html = response.read() # 打印字符串 print(html) 执行写的python代码,将打印结果: python3 urllib_urlopen.py ** 实际上,如果我们在浏览器上打开百度主页, 右键选择“查看源代码”,你会发现,跟我们刚才打印出来的是一模一样。也就是说,上面的4行代码就已经帮我们把百度的首页的全部代码爬了下来。** 一个基本的url请求对应的python代码真的非常简单。 Request 在我们第一个例子里,urlopen()的参数就是一个url地址;但是如果需要执行更复杂的操作,比如增加HTTP报头,必须创建一个 Request