爬虫学习--对requests的基本使用和网页解析

爬虫学习–对requests的基本使用和网页解析

爬虫操作

  1. requests库

    1. 需要下载 pip install requests
    2. 导入模块 import requests
  2. requests 提交请求的方式有两种
    get和post
    使用哪种方式请求需要查看network抓包的信息
    下图中,
    Request URL是发送请求的地址
    Request Method是请求该链接的方式,此处用get方法请求百度网页
    Response Headers是发送请求后将会回应的信息
    响应头中,查看Content-Type,文中是text/html 则回应的是文本类型的html代码
    在这里插入图片描述
    点击Response即可查看将要返回的数据内容
    在这里插入图片描述

get方法

import requests
get 参数有
url 请求的地址
params 提交的参数,会出现在地址栏后面
r = requests.get(url,params=None)

post方法

import requests
post 参数有
url 请求地址
data 请求提交的数据
json 提交json格式的数据
r = requests.post(url,data=None,json=None)

使用情况
有时候为了网页跟服务器更好的交互,会选择发送ajax请求,用post方式提交请求
响应头的content-type是json,则提交request请求后,将会以json格式响应,
响应内容在Response里
在这里插入图片描述

反反爬机制

  1. UA设置
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36'
}
r = requests.get(url,headers=headers)

BeautifulSoup 解析

  1. pip install bs4
  2. pip install lxml
from bs4 import BeautifulSoup
需要创建BeautifulSoup对象,参数有
str html文本内容
'lxml'  解析方式
r = requests.get(url)
soup = BeautifulSoup(r.text,'lxml')
使用方法
soup.tagName  都是查找第一个tagName的内容
soup.find('tagName')
属性定位
soup.find('tagName',class_='name') 查找class属性是name的tagName标签

soup.find_all('tagName') 查找所有tagName的内容,返回的是列表类型
soup.select() 标签选择器,类似于jquery的选择器
soup.select('.className a') 查找class属性是className下的所有a标签,返回的是列表类型

获得非属性字符串
soup.tagName.text/get_text()/string
.text和.get_text():找到该标签下所有的字符串
string: 找到该标签的直属字符串
获得标签属性值
soup.tagName['class'] 获得该标签的class属性的值

xpath

安装环境

下载 pip install lxml
导入 from lxml import etree

基本使用

  • 建立etree对象
    1. 导入本地html
      指定页面的编码格式 parser = etree.HTMLParser(encoding=“utf-8”)
      tree = etree.parse(‘广州.html’,parser=parser)
    2. 获得网页文本
      tree = etree.HTML(‘html文本’,parser=parser)

如果本地html不符合编码格式会报错,因此需要添加parser

-tree.xpath(‘xpath表达式’)

  1. / 最左边的斜杠表示从根节点开始定义,其他的表示一个层级
  2. // 表示多个层级,可以任意地方地位
  3. 属性定位 /tagName[@class=“classname”]
  4. 索引定位 /tagName[i] i是从1 开始索引
  5. 取文本
    /text() 获得标签的直系文本内容
    /div/text() 获得div的直系文本内容
    //text() 获得标签所有的文本内容
  6. 取属性
    /@attrName
    ex: /img/@src 获得照片的src属性的值
  7. 局部定位
    li = tree.xpath(’//div/li’) 找到div里的li元素
    li.xpath(’./a/text()’) 从上述找到的li元素开始找a的文本内容

解决乱码问题

res = requests.get(url,headers=headers)
res.encoding = res.apparent_encoding
或者
detail_name = detail_name.encode('iso-8859-1').decode('gbk')

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值