Python爬虫必备技术点【续】

一、非爬虫框架

1.1 爬虫的认知

数据请求(网络请求库)

数据解析(re/xpath/bs4)

数据存储(csv/pymysql/json??)

反反爬的策略

ip代理

ua池

cookie池: 收集手动登录之后的响应的Cookie信息

请求间隔(2~5秒)

验证码处理(打码平台、机器学习???)

1.2 网络请求库

urllib

request

urlopen()

urlretrieve(fullurl, filename)

Request(url, data=None, headers)

build_opener(*handlers)

HTTPHandler

HTTPCookieProcessor(http.cookiejar.CookieJar())

ProxyHandler(proxies={})

parse

quote()

urlencode()

http.client.HTTPResponse

code

getheaders()

getheader(name, default)

read() 读取的响应字节数据

requests (第三方)

request(method, url, params, data, json, files, headers, cookies, proxies, auth)

get(url, params, **kwargs)

post(url, data, json, **kwargs)

put(url, data, json, **kwargs)

delete(url, **kwargs)

Response

status_code

encoding

headers

content 字节数据

text 文本数据

json() json文本反序列化为Python的dict/list的对象

1.3 数据解析

re 正则表达式

xpath (pip install lxml)

lxml.etree.HTML(‘html内容’) 返回Element对象

xpath(‘path路径’) 返回Element或List[,…]

text 标签文本

get(‘标签属性’)

bs4 (pip install bs4)

from bs4 import BeautifulSoup

root = BeautifulSoup(html, ‘lxml’) bs4.element.Tag

查询元素标签的方法

find(‘标签名’, class_, id_) 查找第一个

find_all(‘标签名’, class_, id_, limit=N) 查找前N个

select(‘css选择器’)

#id

.classname

标签名

后代标签

兄弟标签 (查找多个标签)

属性标签

伪类

Tag属性

string/text

get_text()

attrs: dict 标签中所有属性的字典

contents 子标签的文本列表

descendants 子标签的Tag列表

1.4 多任务爬虫

多线程

threading

Thread

queue.Queue 线程队列

多进程

multiprocessing

Process

Queue 进程队列

协程

asyncio

coroutine 协程装饰器

get_event_loop()

wait()

sleep()

yield from

async / await

1.5 selenium框架

以driver程序驱动浏览器,对目标(网站或网页)进行操作(请求网页、提取数据、截图、切换或关闭页签-window)。

chrome.get() 打开目标(发起请求)

chrome.quit() 退出浏览器

chrome.close() 关闭当前的窗口

chrome.find_element(By, value)

selenium.webdriver.common.by.By

ID

CLASS_NAME

NAME

XPATH

CSS_SELECTOR

LINK_TEXT

WebElement 查到的标签对象

get_attribute(‘属性名’, default)

text 标签文本

click()

send_keys()

rect 当前元素的位置(left, top, width, height)

chrome.find_elements(By, value)

execute_script()

save_screenshot(filename) 截图

等待某一个标签元素出现

selenium.webdriver.support

ui

WebDriverWait

expected_conditions

visibility_of_all_elements_located((By, value))

ui.WebDriverWait(dirver, timeout) \

.until(expected_conditions, error_msg )

1.6 docker

容器技术,将远程的docker仓库中的镜像下拉到本地, 再将镜像运行成为一个容器(进程)。

- 镜像操作

- 基本信息

- 名称

- 版本

- ID

- 描述

- docker images 查看所有镜像

- docker rmi 名称:版本号 / ID 删除镜像

- docker run 名称:版本号 / ID 启动镜像

- -dit 后台启动镜像,启动后可进入容器并打开新的terminal(终端)

- -p 宿主机端口: 容器端口

- 容器操作

- docker ps 查看正运行的容器

- -a 查看所有的容器

- -l 查看最后一个启动的容器

- docker logs 容器名或ID  查看容器运行的日志

- docker exec 容器名或ID Linux命令 在容器中执行Linux命令

- docker exec -it 容器名或ID bash 进入容器

- docker stop 容器名或ID

- docker start 容器名或ID

- docker restart 容器名或ID

- docker rm -f 容器名或ID 删除容器, -f强制删除正运行的容器

二、日志模块进阶

2.1 日志格式

格式     说明

%(name)s     记录器的名称, 默认为root

%(levelno)s     数字形式的日志记录级别

%(levelname)s     日志记录级别的文本名称

%(filename)s     执行日志记录调用的源文件的文件名称

%(pathname)s     执行日志记录调用的源文件的路径名称

%(funcName)s     执行日志记录调用的函数名称

%(module)s     执行日志记录调用的模块名称

%(lineno)s     执行日志记录调用的行号

%(created)s     执行日志记录的时间

%(asctime)s     日期和时间

%(msecs)s     毫秒部分

%(thread)d     线程ID

%(threadName)s     线程名称

%(process)d     进程ID

%(message)s     记录的消息

2.2 日志模块应用

import logging

from logging import StreamHandler, FileHandler

四个核心部分

日志记录器logger: 记录日志信息

日志处理器 handler: 记录信息之后,由handler去处理

日志过滤器 filter: 对记录信息进行过滤。

日志格式化 formatter: 由处理器对记录的信息按formatter格式进行处理(除HTTPHandler和SMTPHandler之外)。

核心方法或函数

logging.getLogger(name) # 默认没有name时,返回root

logging.baseConfig() 配置root记录器的格式、处理器等。

logging.info()/debug()/warning()/error()/critical() 由root记录器记录日志信息。

logger记录器的核心方法

setLevel(logging.DEBUG|INFO|WARNING|ERROR|FATAL)

addHandler(handler)

addFilter(Filter)

debug()|info()….

handler处理器的核心方法

setLevel(logging.DEBUG|INFO|WARNING|ERROR|FATAL)

setFormatter(fmt)

Formatter初始化参数

format 格式化的字符串, 使用%(日志变量)s 相关日志变量占位符组成的字符串

'hi, %(name)s, age is %(age)s' % {'age': 20, 'name': 'jack'}

'hi, %s, age is %s' % ('disen', 30)

datefmt 指定 %(asctime)s 日志时间的格式, 通常使用 %Y-%m-%d %H:%M:%S 即年月日 时分秒格式。

三、scrapy框架

3.1 scrapy架构组成

五个核心组件

engine 引擎, 协调其它四个组件之间的联系,即与其它四个组件进行通信,也是scrapy框架的核心。

spider 爬虫类, 爬虫程序的编写代码所在, 也是发起请求的开始的位置。spider发起的请求,经过engine转入到scheduler中。

scheduler 调度器, 调度所有的请求(优先级高,则会先执行)。当执行某一个请求时,由engine转入到downloader中。

donwloader 下载器, 实现请求任务的执行,从网络上请求数据,将请求到的数据封装成响应对象,并将响应的对象返回给engine。engine将数据响应的数据对象(以回调接口方式)回传给它的爬虫类对象进行解析。

itempipeline 数据管道, 当spider解析完成后,将数据经engine转入到此(数据管道)。再根据数据类型,进行数据处理(图片、文本)

二个中间件

爬虫中间件, 介于Spider和Engine之间的,可以拦截Spider的发起的请求及数据。

下载中间件,介于Engine和Downloader之间的,可以拦截下载和响应。当然在下载处理之前,可以设置代理 、请求头、Cookie等操作(反反爬设置),还可以基于Splash或Selenium实现特定的操作。

3.2 scrapy指令

创建项目命令

scrapy startproject 项目名称

创建爬虫命令

scrapy genspider 爬虫名 域名

启动爬虫命令

scrapy crawl 爬虫名

调试爬虫命令

scrapy shell url

scrapy shell

fetch(url)

view(response)

response.xpath()

3.3 Response类

属性相关【重点】

body 响应的字节数据

text 响应的编码之后文本数据

headers 响应头信息, 是字节数据

encoding 响应数据的编码字符集

status 响应的状态码

url 请求的url

request 请求对象

meta 元数据,用于request和callback回调函数之间传值

解析相关【重点】

selector()

css() 样式选择器 , 返回Selector选择器的可迭代(列表)对象

scrapy.selector.SelectorList 选择器列表

x()/xpath()

scrapy.selector.Selector 选择器

样式选择器提取属性或文本

::text 提取文本

::attr(“属性名”) 提取属性

xpath() xpath路径

xpath路径,同lxml的xpath()写法

选择器常用方法

css()/xpath()

extract() 提取选择中所有内容,返回是list

extract_first()/get() 提取每个选择器中的内容, 返回是文本

3.4 Request类

scrapy.http.Request

请求对象的属性

url

callback 解释数据的回调函数对象

headers 请求头

priority 请求的优先级, 值越高,优先级越高(优先下载)

四、扩展练习

写出selenium向下和向右滚动的脚本

document.documentElement.scrollTop 向下

document.documentElement.scrollLeft 向右

1

2

写出restful接口设计规范(四个)

- 每个资源都有唯一标识 URI

- 每个资源具有四个动作, GET|POST|PUT|DELETE

- 每次请求都是无状态

- 接口交互的数据是json或xml

写出常见的反爬虫和反反爬虫

- 访问次数 - IP代理

- Cookie验证- Cookie池

- UA验证  - UA池

- 验证码 - 打码平台

- 动态js渲染 - Selenium/Splash

————————————————

版权声明:本文为CSDN博主「Python-Disen」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/ahhqdyh/article/details/104832423

python爬虫企业级技术点_Python爬虫必备技术点(二)相关推荐

  1. python爬虫企业级技术点_Python爬虫必备技术点(一)

    爬虫必备技术 面向具有Python基础的Python爬虫爱好者,urllib和requests两个库在实际的项目中应用也非常广泛,不仅用于爬虫技术也可以应用在API接口调用方面.如果需要相关的案例可以 ...

  2. python爬虫视频 下载 黑马_Python爬虫能爬视频么(python爬虫零基础视频教程)

    Python爬虫能爬视频么 他视频没有的,但是跑了之后你要处理这个视频,就是问题的?你只需要,得到视频的播放地址,还是要把视频完整的下载到本地的.如果只是爬那个视频的下载地址,很简单,如果要下载的话, ...

  3. python爬虫基础项目教程_Python爬虫开发与项目实战_Python教程

    资源名称:Python爬虫开发与项目实战 内容简介: 随着大数据时代到来,网络信息量也变得更多更大,基于传统搜索引擎的局限性,网络爬虫应运而生,本书从基本的爬虫原理开始讲解,通过介绍Pthyon编程语 ...

  4. python爬虫模拟与思考_Python爬虫之模拟知乎登录

    昨天受邀在 CSDN 微信群做了一次 Python 技术分享,主题是<用Python模拟知乎登录>,效果非常不错,发现越来越多的人加入到了 Python 阵容中. 经常写爬虫的都知道,有些 ...

  5. python爬虫微博评论图片_python爬虫爬取微博评论

    原标题:python爬虫爬取微博评论 python爬虫是程序员们一定会掌握的知识,练习python爬虫时,很多人会选择爬取微博练手.python爬虫微博根据微博存在于不同媒介上,所爬取的难度有差异,无 ...

  6. python爬取收费素材_Python爬虫练习:爬取素材网站数据

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 在工作中的电子文案.ppt,生活中的新闻.广告,都离不开大量的素材,而素材 ...

  7. python爬虫新浪新闻_python爬虫之获取新浪新闻信息

    一:前言 windows平台: 1):谷歌的chrome浏览器:python3.6的软件安装包,需要导入的库有: [python]  view plain copy pip install reque ...

  8. python爬虫抓取房产_Python爬虫实战(3):安居客房产经纪人信息采集

    1, 引言 Python开源网络爬虫项目启动之初,我们就把网络爬虫分成两类:即时爬虫和收割式网络爬虫.为了使用各种应用场景,该项目的整个网络爬虫产品线包含了四类产品,如下图所示: 本实战是上图中的&q ...

  9. python基础知识500题_python爬虫基础知识点整理

    更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接: 高州阳光论坛https://www.hnthzk.com/ 人人影视http://www.sfkyty.com ...

最新文章

  1. 飞越难关,飞书生态「战疫工具箱」来驰援!
  2. pl/sql块的基本语法
  3. 计算机原理与基础 —— 进制之间的转换(二进制与十、八、十六禁止之间的转换)
  4. mysql max connects_mysql max_connections 总是 4190
  5. 【笔试】:编程实现C++string 类成员函数
  6. Magento教程 24:如何发送电子报! (Newsletter)
  7. 移动端ios中click点击失效
  8. 局域网的主机如何连接外网
  9. 广度优先搜索(啊哈算法)
  10. 计算机中怎样重新安装ps,什么样的电脑适合安装高版本Photoshop?该如何安装和卸载PS呢?...
  11. pandas缺省值处理
  12. linux est 时间,Linux 时间标准简介
  13. gsensor方向调试【转】
  14. Android 10 及api29之后,解决全透明导航栏不成功
  15. AndroidQ(10.0) 手机锁屏炫酷充电动画————html方案
  16. 阿里巴巴iconfont字体图标使用方法
  17. Unity开发之-Unity入门简介(近万字攻略)
  18. 系统集成项目管理工程师案例分析考点汇总(沟通/干系人、风险、合同等)
  19. Altera Max10系列FPGA简介
  20. 【西门子案例】西门子1200PLC 传送带控制升级版

热门文章

  1. VTK修炼之道58:图形基本操作进阶_点云配准技术(迭代最近点ICP算法)
  2. C/C++ Development Library
  3. 使程序不显示在任务栏上
  4. DNS抓包分析--wireshark
  5. 逆序输出(数组练习)
  6. Makefile的重建与include指令
  7. 端口---汇编学习笔记
  8. JAVA SPI机制及SPI机制在Tomcat中的应用
  9. LIVE555再学习 -- testOnDemandRTSPServer 源码分析
  10. Bit-Z生态联盟正式上线 开启全球加密货币市场新征程