
python爬虫
python爬虫相关
静水``流深
这个作者很懒,什么都没留下…
展开
-
05-爬虫进阶_selenium(06 selenium行为链)
行为链将一系列操作整合,然后统一执行(感觉类似excel中的“宏”)。有时候在页面中的操作可能要有很多步,那么这时候可以使用鼠标行为链类ActionChains来完成。比如现在要将鼠标移动到某个元素上并执行点击事件。那么示例码如下:inputTag=driver.find_elenent_by.id("kw")submitTag=driver.find_elenent_by_id("su")actions=ActionChains(driver)actions.move_...原创 2021-01-20 00:28:26 · 139 阅读 · 0 评论 -
05-爬虫进阶_selenium(05 selenium操作表单元素)
一、常见的表单元素input:type='text/password/emai1/number' buttton:input[type='submit'] checkbox:input='checkbox' select:下拉列表二、操作表单元素1、操作输入框:分为两步,第一步:找到这个元素。第二步:使用sena_keys(valuve),将数据填充进去。示例代码如下:inputTag=driver.find_element_by_id(kw)inputTag_send...原创 2021-01-20 00:09:26 · 772 阅读 · 0 评论 -
05-爬虫进阶_selenium(01 - 04:爬AJAX数据的方法、selenium+chromedriver安装、关闭页面和浏览器、定位元素)
待分享原创 2021-01-17 21:41:20 · 370 阅读 · 0 评论 -
05-爬虫进阶_tesseract代码识别图片
tesseract代码识别图片一、安装库:在python代码中操作tesserect。需要安装一个库,叫做pytesseract。通过pip的方式安装:pipinstallpytesseract并且读取图片,需要供助一个第三方库叫做PIL。通过piplist看下是否安装。如果没有安装,通过pip的方式安装:pipinstallPIL二、使用示例使用pytesseract将图片上的文字转换为文本文字的示例代码如下:1、识别英文# encoding: u...原创 2021-01-17 21:31:22 · 214 阅读 · 0 评论 -
05-爬虫进阶_selenium(09 selenium打开多窗口和切换窗口)
selenium打开多窗口和切换窗口切换页面:有时候窗口中有很多子tab页面,这时候肯定是需要进行切换的。selenium提供了一个叫switch_to_window来进行切换,具体切换到哪个页面,可以从driver.window_handles中找到,示例代码如下:#打开一个新的页面se1f.driver.execute_script("window.open('"+url+"')")#切换到这个新的页面中se1f.driver.switch_to_window(se1f.dri..原创 2021-01-17 21:07:27 · 391 阅读 · 0 评论 -
05-爬虫进阶_selenium(11 selenium中的WebElement类补充)
selenium中的WebElement类补充WebElement元素:fromselenium.wedriver.remote.webelementimportWebElenent类是每个获取出来的元素的所属类。有一些常用的属性:get_attribute:这个标签的某个属性的值。 screentshot:获取当前页面的截图。这个方法只能在driver上使用。driver的对象类,也是继承自WebElement。代码举例1:打印出submitBtn的类型from s...原创 2021-01-17 21:07:04 · 530 阅读 · 0 评论 -
05-爬虫进阶_selenium(10 selenium使用代理IP)
selenium使用代理IP设置代理IP:有时候频繁爬取一些网页,服务器发现你是爬虫后会封掉你的ip地址,这时候我们可以更改代理ip。更改代理ip,不同的浏览器有不同的实现方式。这里以Chrome浏览器为例:以下是某代理IP网站搜索到的代理IP:以下是代码:from selenium import webdriverdriver_path = r"D:\application\chromedriver_win32\chromedriver.exe"options...原创 2021-01-17 20:58:38 · 915 阅读 · 0 评论 -
05-爬虫进阶_selenium(08 selenium的隐式等待和显式等待)
selenium的隐式等待和显式等待页面等待:现在的网越来越多采用了Ajax技术,这样程序便不能确定何时某个元素完全加载出来了。如果实际页面等待时间过长导致某个dom元素还没出来,但是你的代码直接使用了这个WebElement,那么就会抛出Nullpointer的异常。为了解决这个问题。所以Selenium提供了两种等待方式:一种是隐式等待、一种是显式等待。1、隐式等待:调用driver.inplicitly_wait.那么在获取不可用的元素之前,会先等待10秒中的时间。示例代码如下:fr原创 2021-01-17 20:20:36 · 233 阅读 · 0 评论 -
05-爬虫进阶_selenium(07 selenium操作cookie)
Cookie操作:1、获取所有的cookie:forcookieindriver.get_cookies()print(cookie)2、根据cookie的key获取value:value=driver.get_cookie(key)3、删除所有的cookie:driver.delete_all_cookies()4、删除某个cookie:driver.delete_cookie(key)示例:fromseleniumimportw...原创 2021-01-17 18:58:08 · 148 阅读 · 0 评论 -
05-爬虫进阶_多线程(04 【实战】斗图啦)
目标:从网站斗图啦下载表情包斗图啦网页示例:1、多线程下载表情包之同步爬虫完成importrequestsfromlxmlimportetreefromurllibimportrequest#保存图片importos#为获取后缀名字importre#替换掉文件名中的特殊字符#url='https://www.doutula.com/photo/list/'defparse_page(url):headers={'User...原创 2020-09-11 15:05:58 · 151 阅读 · 0 评论 -
05-爬虫进阶_多线程(03 GIL全局解释器锁)
GIL全局解释器锁:Python自带的解释器是Cpython。CPytnon解释器的多线程实际上是一个假的多线程(在多核CPU中,只能利用一核,不能利用多核),同一时刻只有一个线程在执行,为了保证同一时刻只有一个线程在执行,在Cython解释器中有一个东西叫GIL(Global Intepreter Lock),叫做全局解释器锁,这个解释器锁是有必要的,因为Cpython解释器的内存管理不是线程安全的。当然除了Cpython解释器,还有其他的解程器,有些解拜释是没有GIL的,见下面:1、Dythen原创 2020-09-11 14:54:01 · 168 阅读 · 0 评论 -
05-爬虫进阶_多线程(02 生产者与消费者模式、线程安全队列)
1-Lock版生产者和消费者模式生产者和消费者模式是多线程开发中经常见到的一种模式。生产者的线程专门用来生产一些数据,然后存放到一个中间的变量中。消费者再从这个中间的变量中取出转握进行消费,但是因为要使用中间变量,中间变量经常是一些全局交量,因此需要使用锁来保证数据完整性。Lock版生产者和消费者模式缺点:不停的解锁、加锁比较耗资源。例如,爬虫:生产者:专门获取url 消费者:专门获取并解析响应 以下是使用threading.Lock锁实现的生产者与消费者模式的一个例子:..原创 2020-09-11 14:30:58 · 131 阅读 · 0 评论 -
05-爬虫进阶_多线程(01 基本用法)
1-多线程概念和threading模块介绍多线程爬虫有些时候,比如下载图片,因为下载图片是一个耗时的操作,如果采用之前那种同步的方式下载。那效本育会特别慢。这时候我们款可以考虑使用多线程的方式未下图片多线程介绍多线程是为了同步完成多项任务,通过提高资源使用效事来提高系统的效率。线程是在同一时间要完成新任务的时候实现的。最简单的比喻多线程就像火车的每一节车题,而进程则是火车,车厢离开火车是无法跑动的,同理火车也可以有多节车。多线程的出现就是为了提高效率,同时它的出现也带来了一些问题。thr原创 2020-09-11 14:30:36 · 118 阅读 · 0 评论 -
【数据解析实战】_糗事百科(爬取所有页)
目标:爬取糗事百科的“段子”数据糗事百科页面:1、正则方法#-*-coding:utf-8-*-# 正则方法import requestsimport reimport timebase_url = 'https://www.qiushibaike.com'headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, ...原创 2020-09-10 23:07:49 · 293 阅读 · 0 评论 -
03-数据解析_正则表达式(04 【实战】糗事百科爬虫)
目标:爬取糗事百科的“段子”数据糗事百科页面:代码:原创 2020-09-10 22:55:12 · 86 阅读 · 0 评论 -
03-数据解析_正则表达式(03 【实战】古诗文网爬虫)
注意:用正则的思路不一样:不存在树结构,在正则眼里只当作‘str’ 关注zip的用法原创 2020-09-10 22:49:52 · 193 阅读 · 0 评论 -
04-数据存储(01 python对象与json字符串的转换、保存读取)
1、Json简介:什么是json:JSON(JavaScript Object Notation,JS对象标记)是一种轻量级的数据交换格式。它基于ECMAScript(w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据,简洁和清晰的层次结构使得JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机图解析和生成,并有效地提升网络传输效率。JSON支持数据格式:1.对象(字典)。使用花括号。2.列表(数组)。使用方括号。3.整形、浮点型。4.字符串原创 2020-09-10 15:37:43 · 299 阅读 · 0 评论 -
04-数据存储(02 csv文件的读取写入)
1、CSV文件简介2、读取CSV文件的两种方式使用数据:test.csv,内容如下:产品编号,产品名称,品牌,类别,采购价格,零售价格1001,小米手机,小米,手机,1800,20001002,小米电脑,小米,电脑,4700,52001003,小米平板,小米,平板,1300,15002001,苹果手机,苹果,手机,6000,80002002,苹果电脑,苹果,电脑,8000,100002003,苹果平板,苹果,平板,2200,30003001,三星手机,三星,手机,3600,.原创 2020-09-10 15:27:36 · 265 阅读 · 0 评论 -
03-数据解析_正则表达式(02 正则运用案例)
正则运用小案例:1、验证手机号码:手机号码的规则是以1开头,第二位可以是34587,后面服9位就可以随意了,示例代妈如下:text='18570631587'ret=re.match('1[34587]\d{9}',text)print(ret.group())#18570631587而如果是个不满足条件的手机号码,那么就匹配不到了,示例代码如下:text='1857063158'ret=re.match('1[34587]\d{9}',tex...原创 2020-09-10 14:18:42 · 224 阅读 · 0 评论 -
03-数据解析_正则表达式(01 基本用法)
1-正则表达式之单个字符匹配规则import re1、匹配某个字符串text = 'hello'ret = re.match('he', text)print(ret.group())结果:>>> print(ret.group())he2、点:匹配任意的字符text = 'hello'ret = re.match('.', text)print(ret.group())结果:>>> print(ret.group())h3、原创 2020-09-10 10:50:14 · 264 阅读 · 0 评论 -
03-数据解析_BeautifulSoup+CSS选择器(03 【实战】 中国天气网爬虫)
爬取中国天气网所有城市的数据,并进行可视化注意:1、中国天气网没有设置反爬虫机制2、对于香港的数据,再网页源码中有<table>,无</table>,再浏览器的元素中,是浏览器自动加的此时用‘lxml’解析器会出错(因为lxml容错能力较差),此时应该用‘html5lib’解析器(容错能力较强)安装方法:pip instail html5lib语句:soup = BeautifulSoup(text,'html5lib')#需求:爬取中国天气网各城市.原创 2020-09-08 18:11:16 · 178 阅读 · 0 评论 -
03-数据解析_BeautifulSoup+CSS选择器(01 BeautifulSoup)
1-BeautifulSoup4库的基本介绍注意:一旦加载,beautifulsoup会自动建立模型,所以开销较大;lxml是C语言编写,速度较快。2-BeautifulSoup4库的基本使用简单使用:from bs4 import BeautifulSouphtml = """ <a href="https://www.doutula.com/article/detail/6394359" class="list-group-item random_list t...原创 2020-09-08 18:05:13 · 189 阅读 · 0 评论 -
03-数据解析_BeautifulSoup+CSS选择器(02 select和css选择器)
1-css常用选择器介绍select方法:有时使用css选择器的方式可以更加的方便。使用css选择器的语法,应该使用select方法。在BeautifulSoup中,要使用css选择器,那么应该使用“soup.select()”方法,应该传递一个css选择器的字符串给select方法以下列出几种常用的css选择器方法:1)通过标签名查找:print(soup.select("a"))2)通过类名查找:通过类名,则应该在类的前面加一个“.”。比如查找class-sister的标.原创 2020-09-08 17:33:06 · 241 阅读 · 0 评论 -
02 网络请求(04 requests库)
1、requests库的基本使用request:不用将data中的参数单独编码,这是其流行的一个原因1)发送GET请求:1、最简单的发送get请求就是通过requests.get来调用:response = requests.get('http://www.baidu.com/')2、添加headers和查询函数:如果想添加headers,可以传入headers参数来增加请求头中的headers信息。如果要将参数放在url中传递,可以利用params参数。impo..原创 2020-09-07 16:41:37 · 226 阅读 · 0 评论 -
02 网络请求(03 cookie)
1、cookie简介2、爬虫自动登录访问授权页面人人网举例:需要登录才能才能查看(经验:不管对方网址是否反扒,都加上请求头,才是最安全的)# -*- coding: utf-8 -*-# 爬虫自动登录访问授权页面(自动获取cookie)# 大鹏董成鹏主页: http://www.renren.com/880151247/profile# 人人网登录url: http://www.renren.com/PLogin.dofrom urllib imp...原创 2020-09-07 15:36:25 · 133 阅读 · 0 评论 -
02 网络请求(02 ProxyHandler实现代理IP)
ProxyHandler处理器(代理设置)很多网站会检查某一段时间某个IP的访问次数(通过流量统计,系统日志等),如果访问次数多得不像正常人,它会禁止这个IP的访问。所以我们可以设置一下代理服务器,没隔一段时间换一个代理,就算IP被禁止,依然可以换个IP继续爬取。常用的代理有:西刺免费代理IP:http://www.xicidaili.com/ 快代理:http://www.kuaidaili.com/ 代理云:http://www.dailiyun.com/此处用“快代理”试验:ht原创 2020-09-07 14:45:55 · 122 阅读 · 0 评论 -
02 网络请求(01 urllib库)
1-urllib库之urlopen函数用法from urllib import requestresp = request.urlopen('http://baidu.com')print(resp.getcode())2-urllib库之urlretrieve函数用法from urllib import requestrequest.urlretrieve('http://www.baidu.com/','baidu.html')urlretrieve:保存网...原创 2020-09-07 12:44:56 · 141 阅读 · 0 评论 -
01 爬虫前奏(02 http协议和chrome抓包工具)
注意:拉勾网本来是用get请求,结果用的是post请求原创 2020-09-07 09:29:35 · 140 阅读 · 0 评论 -
01 爬虫前奏(01 网络爬虫概述)
原创 2020-09-07 09:18:49 · 117 阅读 · 0 评论 -
03-数据解析_xpath(04 【实战】豆瓣电影、电影天堂爬虫)
一、爬取单页信息# -*- coding: utf-8 -*-# 目标:爬取豆瓣网中正在上映电影的信息import requestsfrom lxml import etree# 1. 将目标网址上的网页抓取下来headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safar原创 2020-09-06 22:40:22 · 462 阅读 · 0 评论 -
03-数据解析_xpath(03 lxml和xpath结合使用详解)
注意事项:代码举例:from lxml import etree# =============================================================================# # 1.获取所有tr标签# # 2.获取第2个tr标签# # 3.获取所有class等于even的标签# # 4.获取所有a标签的href属性# # 5.获取所有职位信息(纯文本)# ==================================.原创 2020-09-06 22:38:33 · 132 阅读 · 0 评论 -
03-数据解析_xpath(02 lxml解析html代码和文件)
lxml库方法1:etree.HTML() 会自动补全html代码,并自动添加body、html标签 方法2:etree.parse() 不会自动补全html代码,parse方法默认xml的解析器 代码举例:from lxml import etreedef parse_text(): htmlElement = etree.HTML(text) print(etree.tostring(htmlElement, encoding='utf-8').de原创 2020-09-06 22:37:55 · 196 阅读 · 0 评论 -
03-数据解析_xpath(01 xpath语法详解)
选择节点:注意:选取当前节点:“.”,例://book/. 选取父节点:“..”,例://book/..使用限定符[]:注意:属性匹配://div[contains(@class, "f1")] 【查找属性class下包含“f1”内容的div】 下标是从1开始的,而不是从0开始的使用通配符:通配符说明通配符 描述 * 匹配任何元素节点 @* 匹配任何属性节点 node() 匹配任何类型的节点 实例使用结果:...原创 2020-09-06 22:36:47 · 115 阅读 · 0 评论