Python日记

2018.12.28

1.Urllib库

Python内置请求库

  • urllib.request               请求模块
  • urllib.error                   异常处理模块
  • urllib.parse                 url解析模块
  • urllib.robotparser        robots.txt解析模块

抓取网页 from urllib不可省模块,可以非常方便地抓取URL内容,

也就是发送一个GET请求到指定的页面,然后返回HTTP的响应:

from urllib import request

response=request.urlopen("https://www.douban.com")

print(response.read())

urlopen一般常用的有三个参数,它的参数如下:urllib.requeset.urlopen(url,data,timeout)data是访问url时要传送的数据,二三可以不传送。read()方法返回获取到的网页内容。

Requests 是用python语言编写的第三方库,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,完全满足 HTTP 测试需求,多用于接口测试

http协议有六种请求方法:get、head、put、delete、post、option

Response属性

响应状态(200表示成功、301表示跳转 )、响应头(如内容类型、内容长度、服务器信息、设置cookie等)、响应体(最主要的部分,包含了请求资源的内容,如网页HTML、图片二进制数据等)

  • r.status_code    http请求的返回状态,200表示连接成功,404表示连接失败
  • r.text                 http响应内容的字符串形式,url对应的页面内容
  • r.encoding        从HTTP header中猜测的响应内容编码方式
  • r.apparent_encoding    从内容分析出的响应内容的编码方式(备选编码方式)
  • r.content           HTTP响应内容的二进制形式
  • r.headers          http响应内容的头部内容

爬虫:请求网站并提取数据的自动化程序

爬虫基本流程

  • 发起请求,通过http库想目标站点发起请求,即发送一个request,请求可以包含额外的headers等信息,等待服务器响应
  • 获取响应内容,如果服务器能正常响应,会得到一个response,response的内容便是所要获取的页面内容,类型可能有HTML,json字符串,二进制数据等类型
  • 解析内容,得到的可能是HTML,可以用正则表达式、网页解析库进行解析。可能是json,可以直接转为json对象解析,可能是二进制数据,可以做保存或者进一步的处理
  • 保存数据

2019.1.7

 lxml是python的一个解析库,支持HTML和XML的解析,支持XPath解析方式

XPath的选择功能十分强大,它提供了非常简明的路径选择表达式,另外,它还提供了超过100个内建函数,用于字符串、数值、时间的匹配以及节点、序列的处理等,几乎所有我们想要定位的节点,都可以用XPath来选择

XPath常用规则

/      从当前节点选取直接子节点

//     从当前节点选取子孙节点 eg://book选取所有book子元素,不管他们在文档中位置

.      选取当前节点      ..           选取当前节点的父节点

@    选取属性eg://@lang选取名为lang的所有属*            通配符,选择所有元素节点与元素名

@*   选取所有属性    [@attrib]  选取具有给定属性的所有元素

[@attrib='value']     选取给定属性具有给定值的所有元素

[tag]              选取所有具有指定元素的直接子节点

[tag='text']     选取所有具有指定元素并且文本内容是text节点

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写。JSON中的数据类型:字符串、数值、BOOL、对象、数组

JSON最常用的格式是对象的 键值对。例如这样{"firstName": "Brett", "lastName": "McLaughlin"}

json.dumps 用于将 Python 对象编码成 JSON 字符串

json.loads 用于解码 JSON 数据。该函数返回 Python 字段的数据类型

urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HTTP的响应

Scrapy,Python开发的一个快速、高层次的屏幕抓取和web抓取框架,用于抓取web站点并从页面中提取结构化的数据。Scrapy用途广泛,可以用于数据挖掘、监测和自动化测试.

Scrapy使用方式

  • 交互式 -scrapy shell url
  • 创建项目 -scrapy startproject projname
  • 创建Spider -scrapy genspider spidername "starturl"
  • 运行爬虫 -scrapy crawl spidername

交互式

scrapy shell "www.baidu.com"

resonse对象    -xpath()最灵活最好用  -css()  -extract()提取具体内容  -re()正则表达式提取方式

response.xpath('//div')提取所有的div

2019.1.11

Scrapy框架中分两类爬虫,Spider类和CrawlSpider类。
CrawlSpider是Spider的派生类,CrawlSpider是爬取那些具有一定规则网站的。常用的爬虫Spider类的设计原则是只爬取start_url列表中的网页,而CrawlSpider类定义了一些规则(rule)来提供跟进link的方便的机制,从爬取的网页中获取link并继续爬取的工作更适合。最常用的spider,用于抓取普通的网页。增加了两个成员:rules:定义了一些抓取规则,连接怎么跟踪、使用哪一个parse函数解析此连接。parse_start_url(response)解析初始URL的相应。

Item 对象是种简单的容器,保存了爬取到得数据

解析方式

  • 直接处理
  • Json解析
  • 正则表达式
  • BeautifulSoup
  • PyQuery
  • XPath

怎么保存数据

1.文本,纯文本、Json、Xml等

2.关系型数据库,如MySQL、Oracle、SQL Server等具有结构化表结构形式存储

3.非关系型数据库

4.二进制文件

正则表达式

re.match(parttern,string,flags)方法用于尝试从字符串的起始位置匹配一个正则表达式,如果匹配成功则返回一个match对象,如果没有匹配成功,就返回None。pattern指的是匹配的正则表达式,string指的是用于匹配的字符串,flags是标志位,用于控制正则表达式的匹配方式.

group(0)用于返回匹配的整个字符串,span()方法用于以元祖形式返回匹配的起始位置和结束位置

r'T[io]+m',中间的 [io]+,[io]表示匹配的字符可以是中括号中的任意一个i或o,而后面跟着的+号表示可以对[io]匹配一次或多次。所以只要满足这一条件的字符串都是可以被匹配的

"、'都可表示字符串"""可将单引号双引号表示出来,或者加\转义字符

 列表 list=[1,2,3]

字典 键值对,占容量较大,效率比较快,str(a)-打印字典

元组,元组不能修改a=(1,2)元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用:

 集合(set)是一个无序的不重复元素序列。

如果你需要遍历数字序列,可以使用内置range()函数。它会生成数列for i in range(2,20,2)

函数

def 函数名(参数列表):
    函数体

print的值不能直接调用

 lambda表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数

map() 会根据提供的函数对指定序列做映射,map()是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回

map(lambda x, y: x + y, [1, 3, 5, 7, 9], [2, 4, 6, 8, 10])

[3, 7, 11, 15, 19] 

pandas/numpy

https://www.jianshu.com/p/d9774cf1fea5
 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值