6分钟 Python 爬虫入门

本文详细介绍了使用Python进行网络爬虫的基本操作,包括requests库的GET和POST请求、设置headers和cookie,以及使用lxml和bs4库解析HTML,适合初学者快速掌握网络数据抓取技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.requests 库

这是我们调用访问网址的接口所在的库

1.设置headers请求头

import requests

url = 'https://www.lmonkey.com/'

# 定义头部信息
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
}

res = requests.get(url=url)

code = res.status_code
print(res)

如果不设置headers请求头,网站就会知道我们是一个python程序,从而不让我们访问(甚至会封禁我们的ip);设置请求头就是将我们的python程序伪装成一个浏览器。

2. get请求

光说大家肯定会暴躁,来看一段代码

import requests

# 定义url
url_1 = 'https://www.baidu.com'

# 发生get请求
res = requests.get(url=url_1)

"""
# 获取响应结果
print(res)  #<Response [200]>
print(res.status_code) #请求状态码
print(res.content) #b'...' 二进制的文本流
print(res.content.decode('utf-8')) #把二进制文本流按指定编码格式转换为字符串
print(res.text) #获取响应的内容
print(res.url) #获取请求的url地址
print(res.request.headers) #h获取请求头信息 request
print(res.headers) #响应头信息 response
"""

这里定义的 url_1 是我们要访问的网址

res = requests.get(url=url_1) 是对我们定义的网址进行一次get请求,请求结果保存在res中。想这种就是模版,大家多写几次就记住了。

print(res.status_code) #请求状态码 ,是我们判断访问是否成功的标志,输出200证明返回成功,常见的失败有404,405啥的,大家应该可以明白这个状态码是啥了。

3.post请求

import requests

u = 'https://fanyi.baidu.com/sug'

# 定义头部信息
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
}

# POST发送的数据
data = {
    'kw': '你好'
}

# 发送请求
res = requests.post(url=u, headers=headers, data=data)

# 接收返回数据
print(res.status_code)
# print(res.text)

data 是我们要给网站传送的数据

4.在headers中设置cookie

有的网站的数据需要我们登录才能获取,这时候就要设置cookie了。

import requests

#这是我们想要访问的网站内容
u = 'http://www.rrys2019.com/User/User'

# 定义头部信息
headers = {
    'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.138 Safari/537.36'
}

#这是我们要设置登录cookie的网址
loginurl = 'http://www.rrys2019.com/User/Login/ajaxLogin'

req = requests.session()

data = {
    'account': '********', #你自己的账号
    'password': '********', #密码
    'remember': '1',
    'url_back': 'http://www.rrys2019.com/User/User/'
}

# 发送请求
res = req.post(url=loginurl, headers=headers,data=data)

code = res.status_code

# print(code)
print(res.text)

下面教大家找到设置登录cookie的网址

在这里插入图片描述

点击登录

在这里插入图片描述

找到需要post请求的网址,查看他的内容

在这里插入图片描述

发现传递的格式是 {accout:’’,password:’’,remember:’’,url_back:’’}

于是我们就要构造这种传递的方式

data = {
    'account': '********', #你自己的账号
    'password': '********', #密码
    'remember': '1',
    'url_back': 'http://www.rrys2019.com/User/User/'
}

这样我们就设置好了登录的cookie,可以获取登录后才能查看的内容了。

到这里你已经学会了获取网站的html的内容。可以自己去尝试一下。https://www.lmonkey.com/users/wLndYGMEg(可以去试试爬取这个网站的内容)

二. lxml库 (学习使用xpath)

1.绝对路径选择

from lxml import etree

text = '''

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Spotlight</title>
        <link rel="stylesheet" type="text/css" href="index2.css">
        <script src="1.js">
        </script>
    </head>
    <body>
    
        <h1 data-spotlight="点击kiki对你卖萌">点击kiki对你卖萌</h1>
        <div class="reno">
            <div class="reno1"><img id="kiki" src="../images/k1.JPG" οnclick="changeImage()" style="width: 300px;"></div>
        </div>
        <div class="reno3">
            <div class="reno3_1">许佳琪,1995年8月27日出生于浙江省,中国内地流行乐女歌手、影视演员,SNH48一期生,SNH48 Team SII成员,7SENSES成员 ,《青春有你第二季》训练生。</div>
            <div class="reno3_1">队内职务:  门面担当、舞蹈担当、Rapper担当</div>
            <div><img src="../images/1.PNG" id="image" style="width: 600px; height: 400px;"></div>
            <div class="bt">
                <button id="next" class="bt1" οnclick="nextImage()">next</button>
                <button id="prev" class="bt1" οnclick="prevImage()">prev</button>
            </div>
        </div>
    </body>
</html>

'''
#解析html字符串
html = etree.HTML(text)
#提取数据
r = html.xpath('/html/body/h1/text()')
print(r)
#选择第几个
m = html.xpath('/html/body/div[2]/div[2]/text()')
print(m)

在这里插入图片描述

大家这么聪明肯定看代码就知道如何使用xpath了。值得一提的是xpath的下表是从1开始的。such as, div[1].

2.使用类名选择

在这里插入图片描述

‘//div[@class=“reno3_1”] 是寻找所有div,再看看谁的’class’=‘reno3_1’。
'/text()'是获取标签内的内容

三.bs4 库 (使用BeautifulSoup)

1.通过标签获取数据

from bs4 import BeautifulSoup

html_doc = """

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>Spotlight</title>
        <link rel="stylesheet" type="text/css" href="index2.css">
        <script src="1.js">
        </script>
    </head>
    <body>
    
        <h1 data-spotlight="点击kiki对你卖萌">点击kiki对你卖萌</h1>
        <div class="reno">
            <div class="reno1"><img id="kiki" src="../images/k1.JPG" οnclick="changeImage()" style="width: 300px;"></div>
        </div>
        <div class="reno3">
            <div class="reno3_1">许佳琪,1995年8月27日出生于浙江省,中国内地流行乐女歌手、影视演员,SNH48一期生,SNH48 Team SII成员,7SENSES成员 ,《青春有你第二季》训练生。</div>
            <div class="reno3_1">队内职务:  门面担当、舞蹈担当、Rapper担当</div>
            <div><img src="../images/1.PNG" id="image" style="width: 600px; height: 400px;"></div>
            <div class="bt">
                <button id="next" class="bt1" οnclick="nextImage()">next</button>
                <button id="prev" class="bt1" οnclick="prevImage()">prev</button>
            </div>
        </div>
    </body>
</html>


"""

soup = BeautifulSoup(html_doc, 'lxml')

# 1.通过tag标签对象获取文档数据

# r = soup.link['type']
# r = soup.h1.text
# r = soup.h1.parent.name
print(r)

在这里插入图片描述

2.通过find函数查找

# 2.通过搜索获取页面中的元素 find find_all
 #r = soup.find('button')
 #r = soup.find_all('button',οnclick='nextImage()')
 r = soup.find_all('title')
 x = r.get_text()
# print(r)

在这里插入图片描述

3.通过css标签选择

# 3.css选择器
# 通过标签选择元素;
# r = soup.select('title')
# print(r)
# 通过class,id 选择;
# r = soup.select('.bt1')
# r = soup.select('#next')
# 通过空格 层级关系;逗号,并列关系
r = soup.select('a, title')
print(r)

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值