python爬虫知识点

requests模块:可以间接使用xpath(√√√)

requests.get()

requests.get(url,params = None,headers = None,cookies = None,auth = None,timeout =无)

发送GET请求。 返回requests.response对象。



requests.Response模块

类别:<class 'requests.models.Response'>


text与encoding属性:text是网页响应的内容,encoding是要解码的r.text的编码方式

text返回的是一个 unicode 型的文本数据 (可能是str类型)
通常需要转换为utf-8格式,否则就是乱码

print(response.text) #有些乱码,但可以看出是网页内容

r.encoding = "utf-8"
print(r.text)  # 打印无乱码的网页全部内容



content属性与其decode方法

content返回的是 bytes 型的二进制数据 (取图片,视频,文件),直接写入不需要解码
想看的话需要decode成utf-8格式

print(r.content.decode("utf-8"))#打印网页全部内容



encoding与content.decode()区别

encoding只是r.text的解码方式,响应对象r的本身内容格式没有发生变化

content.decode()改变了响应对象r的解码方式,可以将Response对象改变成str类型
从而可以进一步可以转换成可以进行xpath操作的html对象

resp = requests.get(url)
print(type(resp))

resp = resp.content.decode("utf-8")
print(type(resp))

输出

<class 'requests.models.Response'>
<class 'str'>



headers属性(响应头)与request属性(发送请求时的信息):

response对象的响应头headers是个字典,可以单独取某个值

print(r.headers)  # 打印整个字典
print(r.headers['content-type']) #打印某个特定键对应的值

r.request 是PreparedRequest对象,可以用于查看发送请求时的信息,比如r.request.headers查看请求头
print(r.request.headers) # 查看请求头,也是个字典

---------------------------------------------------------------------------------------------------


urllib包:不可以使用xpath

parse模块



request模块

urlopen():打开URL网址,返回HTTPResponse响应对象

urlopen(url,)data=None):

url参数可以是一个字符串url或者是一个Request对象


reuquest.Request:信息更完善的请求对象,包括headers(请求头)等信息

request = urllib.request.Request(url = url,data = data, /
headers = headers,method = 'POST')

data参数要求bytes(字节流)类型,如果是一个字典,先用urllib.parse.urlencode()编码。
data为空,method默认为get。data不为空,method默认为post

data = urllib.parse.urlencode(字典).encode('utf-8')

---------------------------------------------------------------------------------------------------


Scrapy框架:可以直接使用xpath

Response模块:包括TextResponse、HtmlResponse、XmlResponse(后两种支持xpath)

由Scrapy框架自动产生

Response 对象用来描述一个HTTP响应,Response只是一个基类,根据响应内容的不同有如下子类:
TextResponse、HtmlResponse、XmlResponse(后两种支持xpath)

属性和方法:body/text/encoding/selector/xpath()


使用read()函数 返回未解码的网页内容(如字节流或图片)

read()得到内容后用decode()函数使用对应的解码方式,返回相应的对象(如utf-8 返回字符串)



lxml库: lxml与xpath用于确定文档中某部分位置

lxml库是Python的一个解析库,支持HTML和XML的解析,支持XPath。

from lxml import etree

import requestsre

sp = requests.get(url)
resp = resp.content.decode("utf-8") # 将requests.Response对象转换为str对象

html = etree.HTML(resp)  #将str对象转换为html对象
#现在可以对html对象使用xpath

str = etree.tostring(html) # 将html对象转换回str对象




实例

1.网页全部内容获取

import requests

url="https://baike.baidu.com/item/1/31661?fr=aladdin"
headers = { 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.149 Safari/537.36' }
#网页检查-Headers信息中找到User-Agent

response = requests.get(url,headers=headers)

#打印全部内容方法1
response.encoding = "utf-8"
print(response.text)
#text返回的是一个 unicode 型的文本数据 (可能是str类型),通常需要转换为utf-8格式,否则就是乱码

#打印全部内容方法2
print(response.content.decode("utf-8"))
#content返回的是 bytes 型的二进制数据 (取图片,视频,文件),直接写入不需要解码,想看的话需要decode成utf-8格式。






2.网页内容筛选

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值