python 爬虫 requests、re、xpath模块的使用

目录

1. requests模块

2. re模块

3.xpath模块


1. requests模块

        简介:requests本身不是python的内部库,需要自行下载,下载需要在python终端执行:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple requests

 也可以直接输入:pip install requests

        使用代码:

import requests
query = input('输入要搜索的内容:')
url = f"https://www.sohu.com/xchannel/tag?key={query}"
res = requests.get(url)
print(res)
print(res.text)

需要导入模块:import requests

准备一个网址:url

使用 get 进行爬取,返回响应,用 text 转换成文本形式

       post请求使用:

import requests
url = "https://fanyi.baidu.com/sug"
s = input('请输入要翻译的英文单词:')
dat = {'kw': s}
# 发送post请求,发送的数据必须是字典,通过data参数传递
res = requests.post(url, data=dat)
print(res.json())  # 将服务器返回的数据转换成json,也就是字典

  发送post请求,数据必须是字典,通过data参数传递,返回响应

将服务器返回的数据转换成json,也就是字典

当爬取的网站出现被反爬时,使用参数headers可以简单解决:

# 进行参数处理
headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0"
}
# get请求需要参数params
res = requests.get(url=url, params=param, headers=headers)

2. re模块

re.findall(字符串)

匹配字符串所有符合正则的内容

并且会返回一个列表

re.finditer(字符串)

匹配字符串所有符号条件的内容,

并且返回迭代器

迭代器.group()取得匹配组的内容
re.search(字符串)找到一个符合条件的结果就返回,返回的结果是match对象,拿数据需要使用 .group()
re.match(字符串)从头开始匹配,查到一个符合条件的就返回
re.compile(字符串)预加载正则表达式

使用的实例:

import re

# findall:匹配字符串所有的符合正则的内容
# 使用 findall 结合元字符,返回的是一个列表,
list1 = re.findall(r'\d+', "我的数字:1000,他的数字:2000")
print(list1)
# finditer:匹配字符串所有的内容,返回迭代器,从迭代器中拿到内容需要 .group
list2 = re.finditer(r'\d+', "我的数字:1000,他的数字:2000")
print(list2)
for i in list2:
    # print(i)  # 输出迭代器中的详情
    print(i.group())  # 返回迭代器中的内容

# search:找到一个符号条件的结果就返回,返回的结果是match对象,拿数据需要.group
list3 = re.search(r'\d+', "我的数字:1000,他的数字:2000")
print(list3.group())

# match:从头开始匹配,查到一个符合条件的就返回
list4 = re.match(r'\d+', "1000,3000,他的数字:2000")
print(list4.group())

# compile:预加载正则表达式
obj = re.compile(r'\d+')
# 使用预加载的迭代器
list5 = obj.finditer("我的数字:1000,他的数字:2000")
for i in list5:
    print(i.group())

# 提取想要的数据
s = """
<div>class='sdh'><span id = '1'>小白</span></div>
<div>class='duifgi'><span id = '2'>韩寒</span></div>
<div>class='uirfgh'><span id = '3'>栗子</span></div>
<div>class='gajksg'><span id = '4'>小溪</span></div>
"""
obj1 = re.compile(r"<div>class='(?P<class>.*?)'><span id = '(?P<id>\d+)'>(?P<name>.*?)</span></div>", re.S)  # re.S  可与匹配到换行符

list6 = obj1.finditer(s)
for i in list6:
    print(i.group("class", "id", "name"))  # 输出多个为一个元组


3.xpath模块

        简介:xpath是用在xml文档中搜索内容的一门语言,html是xml的子集,使用xpath需要安装lxml包。

        1. 导包:from lxml import etree

        2.创建对象:对象名 = etree.XML(内容)

        3.获取内容:使用 对象.xpath(目录) 可以拿到想要的那内容,返回的结果是一个列表

        4.使用 [] 可以拿到第几个相同标签的内容,标签起始从1开始

        4.使用 @ + 标签,可以拿到属性值

具体实例:

# xpath 是在xml文档中搜索内容的一门语言
# html是xml的一个子集
# 需要安装lxml包

from lxml import etree  # 调用etree模块使用

xml = """
<book category="web">
   <title lang="en">XQuery Kick Start</title>
   <name>床前明月光</name>
   <author>James McGovern</author>
   <author>Per Bothner</author>
   <author>Kurt Cagle</author>
   <author>James Linn</author>
   <div>
        <author>你是傻掉</author>
    </div>
   <author>Vaidyanathan Nagarajan</author>
   <year>2003</year>
   <price>49.99</price>
 </book>
"""
# 创建etree的对象
tree = etree.XML(xml)
# result = tree.xpath("/book")  # 这里的/表示层级关系,第一个/相当根目录,返回一个列表
result = tree.xpath("/book/name/text()")  # 拿到name标签里面的内容, text()拿到文本内容
result2 = tree.xpath('/book/author/text()')  # 达到同一层级的所有author里面的内容
result3 = tree.xpath('/book//author/text()')  # //可以拿到所有//后面那一层级的内容
result4 = tree.xpath('/book/*/author/text()')  # /*/ 通配找到节点
print(result)  # 输出:['床前明月光']
print(result2) # 输出:['James McGovern', 'Per Bothner', 'Kurt Cagle', 'James Linn', 'Vaidyanathan Nagarajan']
print(result3) # 输出:['James McGovern', 'Per Bothner', 'Kurt Cagle', 'James Linn', '你是傻掉', 'Vaidyanathan Nagarajan']
print(result4) # 输出:['你是傻掉']

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱笑的蛐蛐

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值