学习目标:

python爬虫部分的学习


学习内容:

mooc北京理工大学·Python网络爬虫与信息提取

对Scrapy内核依然一知半解,但mooc内容已经学完整理

后续将对Scrapy继续进行学习

将后续的Numpy库暂缓

个人认为这组课没python语言程序设计讲得好,很多点都没有讲清楚,需要直接查资料填补


学习产出:

​​​​​​​

python爬虫与信息提取

Requests库

机理

向服务器端发送请求时,服务器为本次请求创建request对象,Request对象中封装了客户端发送过来的所有的请求数据。

r=requests.get(url)

requests.get()函数构造了一个向服务器请求资源的Request对象 返回一个包含服务器资源的Response对象指向r

七个主方法

.request(method,url,**kwargs)

构造一个请求,为各方发的基础方法

method对应六个方法

kwargs: params 字典或字节序列,作为参数增加到url中 data 字典,字节序列或文件对象,作为Request的内容提交 json JSON格式的数据,作为Request内容部分提交 headers 字典,HTTP定制头,修改头文件 cookise 字典或CookieJar auth 元组,支持HTTP认证功能 files 字典类型,传输文件 timeou 设置超时时间,秒为单位 proxies 字典类型,设定访问代理服务器,可以增加登录验证 allow_redirects True/False,默认为T,重定向开关 stream True/False,默认为T,获取内容立即下载开关 verify True/False,默认为T,认证SSL证书开关 cert 本地SSL证书路径

kv={} r=r.r('GET','url',     params    =kv) r.url=url+?+eval(kv)

r=r.r('POST','url',    data    =kv) 将kv存储到url对应部分

jion同理

hd={'user-agent':'Chrome/10'} r=r.r('POST','url',     headers    =hd 改变请求网站时的request对象的头文件对应内容

fs={'file':open('data.xls','rb') r=r.r('POST','url',     files     =fs 向url提交文件

psx={'http':'http://user:pass@10.10.10.1:1234'          'https':'https://10.10.10.1:4321'} r=r.r('GET','url',      proxies      =pxs) 增加http和https代理

.get(url,params=None,**kwargs)

获取HTML网页的主要方法,对应HTTP的GET

params为url中的额外参数,字典或字节流格式,可选

.head(url,**kwargs)

获取HTML网页头信息的方法,对应HTTP的HEAD

.post(url,data=None,json=None,**kwargs)

向HTML网页提交POST请求的方法,对应HTTP的POST

提交

.put(url,data=None,**kwargs)

向HTML网页提交PUT请求的方法,对应HTTP的PUT

将提交的所有数据进行覆盖,没涉及到的原内容将被删除

.patch(url,data=None,**kwargs)

向HTML提交局部修改请求的方法,对应HTTP的PATCH

.delete(url,**kwargs)

向HTML网页提交删除的请求方法,对应HTTP的DELETE

Response对象的属性

.status_code

HTTP请求的int型返回状态,200成功

.text

HTTP响应的字符串格式,即url对应的页面内容

.encoding

从HTTP header中猜测的内容编码方式

.apparent_encoding

从内容分析出的编码方式

.contrnt

HTTP响应内容的二进制形式

Requests库异常

.ConnectionError

网络连接错误,如DNS查询失败,拒绝连接等

.HTTPError

HTTP错误异常

.URLRequired

URL缺失异常

.TooManyRedirects

超过最大定向次数,产生重定向错误

.ConnectTimeout

连接远程服务器超时异常

.Timeout

请求URL超时异常

.raise_for_statuw()

如果不是200,产生.HTTPError异常

爬取实例

京东商品界面爬取

亚马逊商品页面爬取

百度关键词提交

图片爬取

IP地址对属地查取

Robots协议

User-agent:* Disallow:/pop/*.html User-agent:EtaoSpider Disallow:*

所有网络爬虫不可访问/pop/*.html格式文件 EtaoSpider不可访问所有文件

类人行为可不参考Robots协议

标签Tag

标签 Tag :<p calss='title'等>....</p> 标签的名字<tag>.name=p 标签的属性<tag>.attrs={'calss'='title'} 标签内非属性字符串<tag>.string=.... comment标签内字符串的注释部分     备注格式<!--str-->

对应类型 tag为bs4.element.Tag类型 <tag>.name对应str类型 <tag>,.attrs对应dict类型 <tag>.string对应NavigableString类型 备注为bs4.element.Commene类型

<tag>.string与<tag>.text区别 .string在tag包含多个节点的时候无法确定调用哪个子函数的内容,所以输出None .text可以将全部尖括号隐去,将剩余所有文本合并

Beautiful库

from bs4 import Beautifulsoup

soup=Beautifulsoup('html','html.parser')

将一段html文本转换为可操作的标签树,返回一个标签<soup>

'html.parser'为解析器

共有 'html.parser' 'lxml' 'xml' html5lib' 需要对应安装对应库

<tag>.<标签名>

访问该标签 存在多个同名标签时返回第一个

<tag>(str)

返回所有名字为str的标签组成的列表

<tag>.prettify()

在tag内自动增加'\n'与空格,返回修改后的文本 print(tag.prettify())输出按缩进分层的文本便于查看

isinstance(tag,类型)

如果字节符合该类型,函数返回True

注意:包括'\n'在内的字符串也视为一个节点

下行遍历

.contents

返回一个列表,存放其儿子节点

.children

子节点的迭代类型,与.contents类似,返回一个迭代器,用于循环遍历儿子节点

区别: contents与children类似 [0,1,2,3]与range(4)的区别

.descendants

子孙节点的迭代遍历,包括所有的子孙节点,返回一个迭代器,用于循环遍历

上行遍历

.parent

返回节点的父亲标签

soup.html.parent因为html为最高节点,没有父亲节点,系统返回html节点自己 soup.parent虽然soup也属于节点,但无相应属性,返回None

!

.parents

父亲节点的迭代遍历,返回一个迭代器,用于循环遍历先辈节点

平行遍历

平行遍历只作用于同一个父亲节点的范围内

.next_sibling

返回按照html文本顺序的下一个平行节点标签

.previous_sibling

返回按照html文本顺序的上一个平行节点标签

.next_siblings

迭代类型,返回按照html文本顺序的后续所有平行节点标签

.previous_siblings

迭代类型,返回按照html文本顺序的前续所有平行节点标签

信息的标记形式

XML

<p calss='title'等>....</p>

缩写形式 <img src='china.jpg' size='10'/>

实例: <person>    <firstName>Tian</firstName>    <lastName>song</lastName>    <address>          <streetAddr>中关村南大街5号</streetAddr>          <city>北京市</city>          <zipcode>100081</zipcode>    </address>    <prof>Computer System</porf><porf>Security</prof> </person>

最早的通用信息标记语言,可扩展性号,繁琐 多用于网络上的信息交互于传递

注释形式 <!--str-->

JSON

有类型的键值对 key:valuw

'name' : '北京理工大学'

'name' : ['北京理工大学','延安自然科学院']

实例: {      'firstName' : 'Tian',      'lastName' : 'song,      'address' : {                   'streetAddr' : '中关村南大街5号’,                   'city' : '北京市'                   'zipcode' : '100081'                       }      'prof' : ['computer','Security'] }

信息有类型,合适程序处理,较XML简洁 多用于移动运用云端和节点的信息通信 无注释

'name' : {           'newName' : '北京理工大学'           'oldName' : '延安自然科学院'               }

YAML

无类型键值对

name:北京理工大学

缩进表达所属关系 name:     newName:北京理工大学     oldName:延安自然科学院

实例: firstName : Tian lastName : song address :         streetAddr : 中关村南大街5号         city : 北京市         zipcode : 100081 prof : -Computer System -Security

信息无类型,文本信息比例最高,可读性好 多用于各类系统的配置文件,有注释易读

- 表达并列关系 name: -北京理工大学 -延安自然科学院

| 表达整块数据 #表示注释

信息的提取

<tag>.find_all(name,sttrs,recursive,string,**kwargs) 等价于<tag>(name,sttrs,recursive,string,**kwargs)

在tag标签内按格式查找所有节点组成的列表

name 对标签名称检索 .find_all(['a','b']多名称检索 .find_all(True)输出所有标签 .find_all(re.compile('b'))检索所有含名字b的标签

attrs 对标签的属性值内容检索 .find_all('p','course')输出所有属性值内容包含course字符串的标签p .find_all(id=re.compile('link'))输出所有属性值中id键对应的值的内容包含link字符串的标签

recursive=True/False 是否对子孙全部检索,默认True

string 对标签中字符串区域检索,用法上同

因为检索所有节点 字符串也属于节点 所以返回值为字符串的列表

其他拓展

<tag>.find()

只返回一个结果,参数上同

<tag>.find_parent()

在先辈节点中搜索,返回一个结果,参数上同

<tag>.find_parent()

在先辈节点中搜索,返回一个列表,参数上同

<tag>.find_next_sibling()

在后续平行节点中搜索,返回一个结果,参数上同

<tag>.find_next_siblings()

在后续平行节点中搜索,返回一个列表,参数上同

<tag>.find_previous_sibling()

在前续平行节点中搜索,返回一个结果,参数上同

<tag>.find_previous_siblings()

在前续平行节点中搜索,返回一个列表,参数上同

re库

r'正则' 与区别 '正则'

r'text'为原生字符串类型,text中的\仅与正则关系式有关,而非转义符 r'\b'=='\\b'表示单个数字

re库的主要功能函数

.search(pattern,string,flags=0)

在字符串中搜索匹配正则表达式的第一个位置 返回match对象 pattern:正则表达式 string:待匹配字符串 flags:正则表达式使用时的控制标记

glags: re.I   re.IGNORECASE  忽略大小写 re.M   re.MULTILINE  从每行开始分段匹配 re.S   re.DOTALL  .操作符能匹配所有字符,不开启时不能匹配回车

.match(pattern,sstring,flags=0)

从字符串的开始位置直接匹配正则表达式 返回match对象 pattern,string,flags上同

.findall(pattern,sstring,flags=0)

搜索字符串,匹配所有能匹配的子串 返回列表 pattern,string,flags上同

.split(pattern,sstring,maxsplit,flags=0)

将一个字符串按照正则表达式结果进行分隔 返回列表 pattern,string,flags上同 maxsplit表示最大分隔数 maxsplit为1表示分隔1次后字符串保持不变为一整体 分隔操作与字符串的相同 若以\w进行分隔'。。。。ab。。。' 分隔一次结果为[’。。。‘,'b。。。'] 分隔两次结果为['。。。','','。。。']

.finditer(pattern,sstring,flags=0)

搜索字符串,返回一个匹配结果的迭代类型 每个迭代元素为match对象 pattern,string,flags上同

.sub(pattern,repl,sstring,cout=0,flags=0)

在一个字符串中替换所有匹配的子串 返回替换后的字符串 pattern,string,flags上同 repl:替换匹配字符串的字符串 count:匹配的最大替换次数

match对象

属性

.string

待匹配的文本

.re

匹配时使用的patter(正则表达式)对象

.pos

正则表达式搜索文本的开始位置

.endpos

正则表达式搜索文本的结束位置

方法

.group(0)

获得匹配后的字符串

.start()

匹配字符串在原始字符串的开始位置

.end()

匹配字符串在原始字符串的结束位置

.span()

返回(.start(),.end())

re.compile(pattern,flags=0)

将正则表达式的字符串编译成正则表达式对象

pat=re.compile('正则表达式') rst=pat.search('text')

Scrapy库

scrapy爬虫框架

首先spider(爬虫)根据自身内容请求第一个要爬取的url,通过engine将url存入scheduler,由scheduler进行调控url的出列顺序,出列后经过engine向dowmloader请求下载,downloader从网络上下载内容经engine提交至spider,由spider(爬虫)进行数据处理,处理结束后提交至engine向piprline输出,这期间如果还需进行url爬取,再将url交至scheduler放入队列

scrapy的命令行格式 scrapy <command> [options] [args]

command: startproject创建一个新工程 genspider创建一个爬虫 settings获得爬虫配置信息 crawl运行一个爬虫 list 列出工程中所有爬虫 shell京东url调试命令行

scrapy startproject <name> [dir] scrapy genspider [options] <name> <domain> scrapy settings [options] scrapy crawl <spider> scrapy list scrapy shell [url]

domain为url为最高域,爬虫只能在这级以下爬取

具体文件介绍

projeck/                            外层目录       scrapy.cfg                   部署scrapy爬虫的配置文件       project/                       scrapy框架的用户自定义python代码             _init_.py                 初始化脚本             items.py                 items代码模板             middlewares.py     Middlewares代码模板             pipelines.py           Pipelines代码模板             settings.py             Scrapy爬虫的配置文件             spiders/                  spaider代码模板目录(存放建立的爬虫)                   _init_.py            初始文件                   _pycache_/        缓存目录

爬虫的返回Response对象的属性

.url

HTTP相应的 URL地址,str类型的

.status

HTTP响应状态码,int类型的

.headers

Response对应的头部信息

.body

HTTP响应正文,bytes类型

.text

文本形式的HTTP响应正文,str类型,由response.body使用response.encoding解码得到

.flags

一组标记

.request

产生该HTTP响应的Requset对象

.encoding

HTTP响应正文的编码

.meta

response.request.meta 在构造request对象的时候,可以将要传递个响应处理函数的信息通过meta参数传入;响应处理函数处理响应时候,通过response.meta将信息取出

.selector

选择器对象用来提取response中的数据

.xpath

即xml路径语言,用来确定xml文档中某部分位置的语言

.css

一种选择器,用来提取页面内中的数据,但是不如xpath强大。

urljoin

用来构造绝对url,(爬取页面的时候跳转到第二页的时候需要重新构造request,这个时候用的到这个属性)

yield保留字的理解

def foo():     print("starting...")     while True:         res = yield 4         print("res:",res) g = foo() print("*"*20) print(next(g)) print("*"*20) print(g.send(7)) print("*"*20) print(next(g))

首先yield类似return与print     在g=foo()行中遇到了yield 4,输出4后函数冻结     在print(next(g))中遇到next,函数被唤醒继续执行,上次于yield 4被冻结,这次继续yield 4后的给res的赋值操作,因为4被yield输出,等号右边无对象,将None赋予g,进行循环,遇到yield 4后再被冻结。     print('*'*20)输出     在print(g.send(7))行中遇到send,函数被唤醒,同理继续赋值操作,但send函数把7作为等号右边内容赋予g,继续循环,遇到yield 4后再被冻结     print('*'*20)输出     在print(next(g))行中遇到send,函数被唤醒,同理将None赋予g,继续循环,遇到yield 4后被冻结

输出: starting... 4 ******************** res: None 4 ******************** res:7 4 ******************** res:None 4

生成器

def gen(n):     for i in range(n):         yield i**2 for i in gen(5):     print(i,' ',end='')

输出: 0 1 4 9 16

CSS Selector

<HTML>.css('a::attr(href)').extract()

北京理工大学·Python网络爬虫与信息提取·知识整理相关推荐

  1. python网络爬虫与信息提取_北京理工大学_Python网络爬虫与信息提取(一)

    学习 北京理工大学 嵩天 课程笔记 课程体系结构: 1.Requests框架:自动爬取HTML页面与自动网络请求提交 2.robots.txt:网络爬虫排除标准 3.BeautifulSoup框架:解 ...

  2. python网络爬虫与信息提取北京理工大学_Python网络爬虫与信息提取(一)

    Reference: 第一周 网络爬虫之规则 单元1:Requests库入门 1-1 Requests库的安装 1-2 Requests库的get()方法 1-3 爬取网页的通用代码框架 1-4 HT ...

  3. python网络爬虫与信息提取北京理工大学ppt_北京理工大学Python网络爬虫与信息抽取学习笔记10,信息提取...

    Scrapy爬虫产生步骤 1.建立一个Scrarrpy爬虫工程 cmd命令提示符中选择目录 输入 scrapy start project name #工程名不要含中文,否则之后生成爬虫时会报错 生成 ...

  4. python网络爬虫与信息提取北京理工大学ppt_Python网络爬虫与信息提取

    spContent=理论力学课程组以学生为主体,开展了内容丰富.题材广泛的教学改革与实践研究工作,学生受益量大面广,成效显著.2010年以来编著出版<理论力学>等教材7部9本.承担教研教改 ...

  5. python 网页爬虫作业调度_第3次作业-MOOC学习笔记:Python网络爬虫与信息提取

    1.注册中国大学MOOC 2.选择北京理工大学嵩天老师的<Python网络爬虫与信息提取>MOOC课程 3.学习完成第0周至第4周的课程内容,并完成各周作业. 4.提供图片或网站显示的学习 ...

  6. Python网络爬虫与信息提取

    1.Requests库入门 Requests安装 用管理员身份打开命令提示符: pip install requests 测试:打开IDLE: >>> import requests ...

  7. MOOC《Python网络爬虫和信息提取》(第11次)网络爬虫之框架(第4周)

    MOOC<Python网络爬虫和信息提取>(第11次)网络爬虫之框架(第4周) MOOC–Python网络爬虫和信息提取(第11次开课) 网络爬虫之框架 21.08.10 目录 文章目录 ...

  8. Python网络爬虫与信息提取笔记(续篇)(文末附教学视频)只供教学讲解,请勿对有robots协议的网站(如淘宝网)造成骚扰

    接上篇博客:Python网络爬虫与信息提取笔记(文末附教学视频) 14:基于bs4库的HTML内容遍历方法 标签树的下行遍历: 用len(soup.body.contents)返回body标签的儿子节 ...

  9. Python网络爬虫与信息提取—requests库入门

    requests的学习笔记 requests库自动爬取HTML页面,自动网络请求提交 此博客为中国大学MOOC北京理工大学<Python网络爬虫与信息提取>的学习笔记 requests库的 ...

最新文章

  1. 杭电多校第四场-H- K-th Closest Distance
  2. CTFshow 信息收集 web13
  3. JVM——Java内存区域相关3
  4. 并发执行变成串行_网易Java研发面试官眼中的Java并发——安全性、活跃性、性能...
  5. 我们家的HTML5捣蛋王开始行动了
  6. 【MyBatis框架】SqlMapConfigl配置文件之常用的setting设置
  7. Android开机动画过程
  8. 数据仓库入门(实验9)查询多维数据集
  9. 微软自带比对神器,快速比对两个表格-高效好用又简单(99.9%的人没听说过)
  10. linux xdg open 安装,xdg-open默认应用程序行为
  11. 骨骼动画驱动理解, blender 驱动骨骼
  12. 什么是IP阻止,能阻止什么,我们又应如何绕过IP地址的阻止
  13. oracle等差数列,数列的通项公式的教案
  14. html把图像放在指定位置,如何在HTML中将一个图像放在另一个图像的顶部?
  15. ie的js调试工具companion.js使用方法
  16. 邮箱每日发送有上限吗?各大邮箱每天限制发信数量多少?
  17. 北邮智能车仿真培训(四)—— 仿真原理详解
  18. TBS1072B数字示波器波形截图流程
  19. graphql入门使用-查询
  20. 玩转Bootstrap(JS插件篇)

热门文章

  1. 争用期51.2us和最小帧长512比特算法
  2. SQL Server 安装问题:以前的某个程序安装已在安装计算机上创建挂起的文件操作
  3. android edittext失去焦点,Android 点击EditText外部区域失去焦点的方法
  4. 计算机对商务英语的不利之处,商务英语教学中计算机网络利弊分析论文.docx
  5. 暖芯迦推出可编程神经调控平台芯片-元神ENS001
  6. 手机平台强制进下载模式方式
  7. 10. 从0学ARM-基于Exynos4412的pwm详解
  8. 并行:并行编程的基础概述
  9. Rabbit health check failed
  10. airpodspro窃听模式_AirPods怎么开启助听模式 实时收听设置方法介绍