python-爬虫
- requests模块:可以间接使用xpath(√√√)
- requests.get()
- requests.Response模块
- text与encoding属性:text是网页响应的内容,encoding是要解码的r.text的编码方式
- content属性与其decode方法
- encoding与content.decode()区别
- headers属性(响应头)与request属性(发送请求时的信息):
- ---------------------------------------------------------------------------------------------------
- urllib包:不可以使用xpath
- parse模块
- request模块
- urlopen():打开URL网址,返回HTTPResponse响应对象
- reuquest.Request:信息更完善的请求对象,包括headers(请求头)等信息
- ---------------------------------------------------------------------------------------------------
- Scrapy框架:可以直接使用xpath
- Response模块:包括TextResponse、HtmlResponse、XmlResponse(后两种支持xpath)
- lxml库: lxml与xpath用于确定文档中某部分位置
- 实例
- 1.网页全部内容获取
- 2.网页内容筛选
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.网页内容筛选