
Python爬虫
文章平均质量分 52
EchoPython
这个作者很懒,什么都没留下…
展开
-
爬虫怎样绕过验证码?
爬虫怎样绕过验证码- cookie登录1.利用cookie的特性:cookie会保持较长的时间,来避免用户频繁登录2.cookie一般由前端开发用js生成,可以利用抓包尝试下破解,不过这个难度有点高,不过破解js本就是爬虫必须直面面对的3.2OCR库里的tesseract(光学文字识别)可以解决大多数的传统验证码4.软件tesserract-ocr先安装,然后安装pytesserract类库注意:1.Windows需要下载软件安装包,再配置环境变量2.linux 直接在命令窗口输入:sudo原创 2021-01-28 17:03:03 · 3638 阅读 · 0 评论 -
Python笔记-爬取Boss直聘的招聘信息
Python笔记-爬取Boss直聘的招聘信息最近迷上了爬虫,爬取招聘信息,存在MongoDB上代码思路和上一篇爬取酷狗TOP500差不多,但是在使用CSS选择器的时候,有两组信息是连在一起,所以使用正则来获取本来使用串行爬取完美,后来学着用多进程,直接封了IP,郁闷。明天学IP池在玩,贴上完整代码要玩多进程,先搞IP池import re #正则模块import time #时间模块import原创 2021-01-13 17:58:33 · 1844 阅读 · 1 评论 -
Python爬虫:XPath语法
Python爬虫:XPath语法XPathXPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历,我们用来提取格式为HTML的网页源码效率也相当高,可以遍历html的各个标签和属性,来定位到我们需要的信息的位置,并提取。1,安装需要安装lxml库pip install lxml2,语法举例子之前来个常规语法介绍。3,案列说明直接来个案例吧。这里用谷歌浏览器打开开发者工具查看网页源代码(windows在谷歌浏览器界面按F12或者‘设原创 2020-12-31 17:33:54 · 602 阅读 · 0 评论 -
Python之replace()方法
Python之replace()方法replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),如果指定第三个参数max,则替换不超过 max 次。str.replace(old, new[, max])old – 将被替换的子字符串。new – 新字符串,用于替换old子字符串。max – 可选字符串, 替换不超过 max 次返回字符串中的 old(旧字符串) 替换成 new(新字符串)后生成的新字符串,如果指定第三个参数max,则替换不超过 max 次。实例st原创 2020-12-22 17:56:12 · 947 阅读 · 0 评论 -
Python爬虫中的数据采集和分析
数据采集和解析通过《网络爬虫和相关工具》一文,我们已经了解到了开发一个爬虫需要做的工作以及一些常见的问题,至此我们可以对爬虫开发需要做的工作以及相关的技术做一个简单的汇总,这其中可能会有一些我们之前没有使用过的第三方库,不过别担心,这些内容我们稍后都会一一讲到。下载数据 - urllib / requests / aiohttp。解析数据 - re / lxml / beautifulso...原创 2019-07-13 14:52:43 · 706 阅读 · 0 评论 -
Python爬虫之储存海量数据
存储数据存储海量数据数据持久化的首选方案应该是关系型数据库,关系型数据库的产品很多,包括:Oracle、MySQL、SQLServer、PostgreSQL等。如果要存储海量的低价值数据,文档数据库也是不错的选择,MongoDB是文档数据库中的佼佼者,之前我们已经讲解过MongDB的相关知识,在此不再进行赘述。数据缓存通过《网络数据采集和解析》一文,我们已经知道了如何从指定的页面中抓取数据...原创 2019-07-13 14:53:16 · 211 阅读 · 0 评论 -
Python爬虫之并发下载
并发下载多线程和多进程回顾在前面的《进程和线程》一文中,我们已经对在Python中使用多进程和多线程实现并发编程进行了简明的讲解,在此我们补充几个知识点。threading.local类使用线程时最不愿意遇到的情况就是多个线程竞争资源,在这种情况下为了保证资源状态的正确性,我们可能需要对资源进行加锁保护的处理,这一方面会导致程序失去并发性,另外如果多个线程竞争多个资源时,还有可能因为加锁方...原创 2019-07-13 15:02:51 · 273 阅读 · 0 评论 -
Python如何爬取动态网页内容
解析动态内容根据权威机构发布的全球互联网可访问性审计报告,全球约有四分之三的网站其内容或部分内容是通过JavaScript动态生成的,这就意味着在浏览器窗口中“查看网页源代码”时无法在HTML代码中找到这些内容,也就是说我们之前用的抓取数据的方式无法正常运转了。解决这样的问题基本上有两种方案,一是JavaScript逆向工程;另一种是渲染JavaScript获得渲染后的内容。JavaScrip...原创 2019-07-13 15:04:09 · 1770 阅读 · 0 评论 -
Scrapy爬虫框架入门
Scrapy概述Scrapy是Python开发的一个非常流行的网络爬虫框架,可以用来抓取Web站点并从页面中提取结构化的数据,被广泛的用于数据挖掘、数据监测和自动化测试等领域。下图展示了Scrapy的基本架构,其中包含了主要组件和系统的数据处理流程(图中带数字的红色箭头)。组件Scrapy引擎(Engine):Scrapy引擎是用来控制整个系统的数据处理流程。调度器(Scheduler...原创 2019-07-13 15:06:28 · 524 阅读 · 0 评论 -
Scrapy爬虫框架高级应用
Scrapy爬虫框架高级应用Spider的用法在Scrapy框架中,我们自定义的蜘蛛都继承自scrapy.spiders.Spider,这个类有一系列的属性和方法,具体如下所示:name:爬虫的名字。allowed_domains:允许爬取的域名,不在此范围的链接不会被跟进爬取。start_urls:起始URL列表,当我们没有重写start_requests()方法时,就会从这个列表开...原创 2019-07-13 15:07:16 · 295 阅读 · 0 评论 -
常见的 HTTP 头及其作用
http 请求中的常用头(请求头)的含义* http 请求是指从客户端到服务器端的请求消息。包括:消息首行中,对资源的请求方法、资源的标 识符及使用的协议 Accept:告诉服务器,客户端支持的数据类型。Accept-Charset:告诉服务器,客户端采用的编码。Accept-Encoding:告诉服务器,客户机支持的数据压缩格式。Accept-Language:告诉服务器,客户...原创 2019-07-15 14:10:36 · 1850 阅读 · 0 评论 -
Python后端RESTfulAPI 设计规范的理解
一、域名将 api 部署在专用域名下:http://api.example.com。或者将 api 放在主域名下:http://www.example.com/api/。二、版本将 API 的版本号放在 url 中。http://www.example.com/app/1.0/info。三、路径路径表示 API 的具体网址。每个网址代表一种资源。 资源作为网址,网址中...原创 2019-07-15 14:21:44 · 661 阅读 · 0 评论 -
python的可变和不可变数据类型
不可变数据类型python中不可变数据类型的定义为:当该数据类型的对应变量的值发生了改变,那么它对应的内存地址也会发生改变,就称不可变数据类型,包括:int(整型)、string(字符串)、tuple(元组)整型首先我们来看一下整型为什么是不可变数据类型。给一个变量x赋值,然后改变这个x的值,输出前后两次的内存地址id和数据类型typeid():获取对象的内存地址type()...原创 2019-07-18 14:02:56 · 226 阅读 · 0 评论 -
python的IDE(集成开发环境)之PyCharm的基本使用
PyCharm是我一直在使用的python编辑器,今天具体讲一下PyCharm的使用。分为社区版本,和商业版本下载首先是下载PyCharm,PyCharm的下载地址:https://www.jetbrains.com/pycharm/这个是一个商业软件,大家可以选择购买,或者选择试用(免费试用30天),或者在网上找激活码。创建项目下载好之后就可以创建项目了,选择Create New ...原创 2019-07-18 14:09:26 · 594 阅读 · 0 评论 -
Python使用微信接入图灵机器人
1.wxpy库介绍wxpy 在 itchat 的基础上,通过大量接口优化提升了模块的易用性,并进行丰富的功能扩展。文档地址:https://wxpy.readthedocs.io从 PYPI 官方源下载安装:pip install -U wxpy从豆瓣 PYPI 镜像源下载安装,推荐国内用户选用:pip install -U wxpy -i "https://pypi.doubanio...原创 2019-07-18 14:15:56 · 346 阅读 · 0 评论 -
Python批量发送邮件
1.SMTP协议SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,是一个相对简单的基于文本的协议, 在其之上指定了一条消息的一个或多个接收者(在大多数情况下被确认是存在的),然后消息文本会被传输。可以很简单地通过telnet程序来测试一个SMTP服务器。SMTP使用TCP端口25。要为一个给定的域名决定一个SMTP服务器,需要使用MX (Mail eXc...原创 2019-07-18 14:22:22 · 1096 阅读 · 0 评论 -
Python批量处理图片
1.Pillow库介绍Pillow是Python里的图像处理库,提供了了广泛的文件格式支持,强大的图像处理能力,主要包括图像储存、图像显示、格式转换以及基本的图像处理操作等;安装pip install pillow2.Image类PIL中最重要的类是Image类,使用前需要先从PIL中导入Image类,要从文件加载图像可以使用Image类中的open()函数:Image.open(...原创 2019-07-18 14:29:58 · 2092 阅读 · 0 评论 -
Python操作word
1.Python写word文档要操作word文档首先需要安装python-docx库;pip install python-docx然后导入docx模块,或者从docx模块中导入Document类;from docx import Document就可以使用Document()创建一个word文档,若指定路径则是打开文档;document = Document()...原创 2019-07-18 14:34:43 · 1223 阅读 · 0 评论 -
Python爬虫中如何突破反爬虫策略
1.什么是爬虫和反爬虫爬虫是使用任何技术手段批量获取网站信息的一种方式,反爬虫是使用任何技术手段阻止别人批量获取自己网站信息的一种方式;2.User-Agent介绍User Agent中文名为用户代理,是Http协议中的一部分,属于头域的组成部分,User Agent也简称UA。它是一个特殊字符串头,是一种向访问网站提供你所使用的浏览器类型及版本、操作系统及版本、浏览器内核、等信息...原创 2019-07-18 14:39:02 · 942 阅读 · 0 评论 -
爬虫利器Scrapy之Crawl Spider 模板的使用
1.Spider模板scrapy默认创建的spider模板就是basic模板,创建spider文件的命令是:scrapy genspider dribbble dribbble.com,查看spider*模板的命令是:scrapy genspider --list;在项目中明确指明使用crawl生成模板生成spider的命令是:scrapy genspider -t crawl csdn w...原创 2019-07-18 14:42:55 · 1236 阅读 · 0 评论 -
Python第三方模块Beautiful Soup模块使用
1.Beautiful Soup模块的介绍Beautiful Soup 是一个可以从HTML或XML文件中提取数据的Python库,简单来说,它能将HTML的标签文件解析成树形结构,然后方便地获取到指定标签的对应属性,还可以方便的实现全站点的内容爬取和解析;Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不安装它,则 Python 会使...原创 2019-07-18 14:53:53 · 287 阅读 · 0 评论 -
Python第三方库requests模块使用
安装 requests# 在命令行工具中使用pip install requests# 使用前需要导入import requests下面我们来看一下requests库的几种常用高级用法会话对象会话对象可以跨请求保持某些参数,在同一个 Session 实例发出的所有请求之间保持 cookie,会话也可用来为请求方法提供缺省的数据;from requests import Se...原创 2019-07-18 14:58:52 · 274 阅读 · 0 评论 -
python的requests模块的使用
前言:在web后台开发过程中,会遇到需要向第三方发送http请求的场景,python中的requests库可以很好的满足这一要求,这里简要记录一下requests模块的使用!说明:这里主要记录一下requests模块的如下几点:requests模块的安装requests模块发送get请求requests模块发送post请求requests模块上传文件更详细的使用参见官方文档:...原创 2019-07-16 14:16:28 · 189 阅读 · 0 评论 -
python装饰器的使用
前言:在web开发过程中,经常会遇到数据查询慢的问题,对于查询一些时效性不是特别强的数据可以将数据缓存到redis中, 查询的时候直接到缓存中读取数据,这样就可以大大加快查询速度。 但是在开发前,事先没有增加缓存这个功能,并且需要增加缓存功能的地方又有很多,为了在不改变原有代码的基础上添加新的功能,这就要用到python的装饰器。这里简要记录一下装饰器的使用!说明:弄清了装饰器函数的执行...原创 2019-07-16 14:23:09 · 106 阅读 · 0 评论 -
Python的map/defaultdict/sorted/filter函数的使用
前言在python开发中会经常用到map/defaultdict/sorted/filter函数,这里记录一下这几个函数的使用方法。map函数的使用语法:map(function, iterable, …)函数执行过程:以iterable序列中的每一个元素依次去调用function函数,返回每次调用function函数的返回值组成的新列表例子#coding:utf-8''' ...原创 2019-07-16 14:32:33 · 381 阅读 · 0 评论 -
python使用ElementTree操作xml
前言:在web数据传输过程中,用到最多的两种数据传输格式分别是json和xml,现记录一下如何使用python的ElementTree库来操作xml,实现对xml的增删查改!说明:这里通过以下方式来操作xml标签节点的CRUD标签属性的CRUD标签值的CRUDxml数据样例:<?xml version='1.0' encoding='utf-8'?><roo...原创 2019-07-16 14:39:35 · 691 阅读 · 0 评论 -
Python操作redis
前言:最近工作中需要用到redis来缓存一些时效性较低的数据,来减少数据库的查询压力,如:缓存页面某趋势图最近30天的数据等,这里简要记录一下使用过程:使用原始命令操作redis数据库;使用python操作redis数据库;使用原始命令操作redis数据库1.操作数据库 1.连接redis客户端: redis-cli auth 密码 2.确认数据库使用连通...原创 2019-07-16 14:44:30 · 146 阅读 · 0 评论 -
Python读写ini配置文件
前言:在日常工作中经常需要读写配置文件,这里将配置文件的读写封装成一个类,供后续使用关键点代码的介绍:def lock(func): def wrapper(self, *args, **kwargs): # self变量,可以调用对象的相关方法 with Lock(): return func(self, *args, **kwargs)...原创 2019-07-16 14:47:32 · 445 阅读 · 0 评论 -
使用python/java生成uuid
前言在工作中经常会遇到使用32位的uuid作为数据库中的主键id情况,这里记录一下分别使用python和java来生成uuid的方法!python生成uuid# coding:utf-8import uuiddef get_uuid(): """获取uuid""" return str(uuid.uuid1()).replace("-", "").upper()...原创 2019-07-16 14:49:10 · 576 阅读 · 0 评论 -
爬取下来的数据如何去重
通过 MD5 生成电子指纹来判断页面是否改变nutch 去重。nutch 中 digest 是对采集的每一个网页内容的 32 位哈希值,如果两个网页内容完 全一样,它们的 digest 值肯定会一样。数据量不大时,可以直接放在内存里面进行去重,python 可以使用 set()进行去重。当去重数据 需要持久化时可以使用 redis 的 set 数据结构。当数据量再大一点时,...原创 2019-07-12 16:33:41 · 1686 阅读 · 0 评论 -
Python异常处理
今天学习的是对测试中的异常进行捕获,主要用到了两个方法,assertRaises()和assertRaisesRegex()方法测试中的异常捕获对需要测试的接口异常进行捕获from unittest import TestCasefrom unittest import maindef division(a, b): return a / bclass MyTe...原创 2019-07-19 13:11:48 · 193 阅读 · 0 评论 -
Python模块之unittest使用
1.单元测试单元测试是指对软件中的最小可测试单元进行检查和验证,Python中有一个自带的单元测试框架unittest模块,不仅可以适用于单元测试,还可以适用WEB自动化测试用例的开发与执行,该测试框架可组织执行测试用例,并且提供了丰富的断言方法,判断测试用例是否通过,最终生成测试结果;2.unittest库中的基本组件unittest.TestCase():是所有测试用例类继承的基本类,一...原创 2019-07-19 13:17:26 · 309 阅读 · 0 评论 -
Python模块之unittest断言的使用
断言使用我们可以直接在测试用例里面添加unittest框架自带的断言(也就相当于判断),断言方法提供了测试结果是True还是False,所有的断言方法都有一个msg参数,如果指定msg参数的值,则将该信息作为失败的错误信息返回;如果断言失败则抛出一个AssertionError,并标识该测试为失败状态;如果成功,则标识该测试为成功状态;如果异常,则当做错误来处理;先来看一个实例,...原创 2019-07-19 13:22:13 · 810 阅读 · 0 评论 -
requests第三方库在测试中的使用
1.requests库文档链接官方文档:http://www.python-requests.org/en/master/第三方中文文档:http://docs.python-requests.org/zh_CN/latest/user/quickstart.html2.使用requests发送get请求使用requests发送get请求,首先需安装requests模块,然后导入使用;...原创 2019-07-19 13:30:29 · 224 阅读 · 0 评论 -
Django网站设计之Cookie 和 Session分析
1.Cookie概念当用户使用浏览器首次访问一个支持Cookie的网站的时候,用户会提供包括用户名在内的个人信息发送到服务器;接着服务器端接收到客户端发送过来的http请求后,会发送一个http响应到客户端,其中包含Set-Cookie头部,自此,客户端再向服务器发送请求的时候,都会把相应的Cookie再次发回至服务器,服务器在接收到来自客户端浏览器的请求之后,就能够通过分析存放于请求...原创 2019-07-19 13:34:32 · 121 阅读 · 0 评论 -
Python操作SQLite数据库
今天我们要学习的是关于SQLite数据库的相关知识,首先我们来看一下什么是SQLite数据库1.什么是SQLite数据库SQLite是一种嵌入式数据库,它的数据库就是一个文件,且SQLite是遵守ACID的关系数据库管理系统,它包含在一个相对小的C程序库中,与许多其它数据库管理系统不同,SQLite不是一个客户端/服务器结构的数据库引擎,而是被集成在用户程序中的嵌入式关系型数据库;SQLi...原创 2019-07-19 13:38:49 · 268 阅读 · 0 评论 -
Python学习之Redis的使用
1.Redis的概念Redis运行过程,也就是读写过程都是基于内存实现的key/value存储,对比与memcached而言,会基于异步方式(快照)同步到文件系统,实现数据 的持久性存储,单一进程响应用户的所有的请求,具有主从架构 ;Redis支持存储的value类型有很多,包括string(字符串)、list(链表)、set(集合)、zset(有序集合)和hash(哈希类型);2.Wi...原创 2019-07-19 13:47:24 · 160 阅读 · 0 评论 -
Python操作Redis缓存数据库
今天我们来学习如何使用Python操作Redis缓存数据库,首先我们需要使用到一个redis库,使用之前先安装一下,依旧是使用pip进行安装:pip install redis安装好了redis库之后,我们只需使用import redis导入即可使用了,是不是很方便呀,之前的文章里也用到很多库,大部分都是通过这两个步骤使用的;接下来我们开始讲解如何操作Redis数据库,介绍一下Redi...原创 2019-07-19 13:54:18 · 608 阅读 · 0 评论 -
MongoDB的使用
今天来学习一个新的数据库,叫做MongoDB数据库,我们先来了解一下MongoDB数据库的概念,再一起学习如何使用MongoDB数据库吧~1.MongoDB的概念MongoDB是专为可扩展性、高性能和高可用性而设计的数据库,MongoDB的库中由一个或多个collections组成,这里的collection相当于关系型数据库中的表;MongoDB中的记录是一个document文档,...原创 2019-07-19 14:20:15 · 186 阅读 · 0 评论 -
Python操作MongoDB文档数据库
1.Pymongo 安装安装pymongo:pip install pymongoPyMongo是驱动程序,使python程序能够使用Mongodb数据库,使用python编写而成;2.Pymongo 方法one_insert():插入一条记录;insert():插入多条记录;find_one():查询一条记录,不带任何参数返回第一条记录,带参数则按条件查找返回;find()...原创 2019-07-19 14:26:51 · 403 阅读 · 0 评论