Python用requests模块实现动态网页爬虫

Python 中的 requests 模块是一个简单易用的 HTTP 库,它能够帮助我们完成各种HTTP请求,并获取服务端数据。在实现静态网页爬虫时,我们可以直接获取网页 HTML 代码,但是如果网页通过 Ajax 等技术动态加载数据,我们就需要使用 requests 模块来模拟浏览器向服务端发送请求并获取响应。

下面是实现动态网页爬虫的完整攻略:

1. 安装 requests 模块

在终端中执行以下命令即可安装:

pip install requests

2. 获取数据

通过 requests 模块发送 GET 请求,获取服务端响应,并获取所需数据。

import requests

url = 'https://example.com/data'
r = requests.get(url, headers={'User-Agent': 'Mozilla/5.0'})
response = r.json()

上述代码中,我们通过 requests.get 方法发送了一个 GET 请求并传递了 headers 信息,这个 headers 信息会告诉服务端我们是使用浏览器进行请求的。服务端响应数据是以 JSON 格式返回的,所以我们直接调用 r.json() 来解析响应,获取所需数据。

3. 跳过 CSRF 验证

有些网站为了防止跨站请求伪造(CSRF)攻击,会要求在请求中携带 token 信息,如果不携带则会报错。这时我们需要跳过CSRF 验证,方法如下:

import requests

url = 'https://example.com/data'
headers = {
    'User-Agent': 'Mozilla/5.0',
    'X-Requested-With': 'XMLHttpRequest',
    'Referer': 'https://example.com'
}
cookies = {
    'csrftoken': 'xxxx'
}
r = requests.get(url, headers=headers, cookies=cookies)
response = r.json()

在 headers 中传递 X-Requested-With 和 Referer 信息,同时在 cookies 中传递 csrftoken,这样你就可以跳过 CSRF 验证,正常获取数据。

示例

下面以豆瓣电影 TOP250 为例,展示如何使用 requests 模块实现动态网页爬虫:

import requests
from bs4 import BeautifulSoup

url = 'https://movie.douban.com/top250'
headers = {
    'User-Agent': 'Mozilla/5.0'
}
r = requests.get(url, headers=headers)
soup = BeautifulSoup(r.text, 'html.parser')
items = soup.find_all('div', class_='item')
for item in items:
    title = item.find('span', class_='title').text
    rating = item.find('span', class_='rating_num').text
    print('电影名称:{},评分:{}'.format(title, rating))

上述代码使用 requests 模块发送 GET 请求,获取豆瓣电影 TOP250 的页面 HTML 代码,使用 BeautifulSoup 解析 HTML 代码,并获取电影名称和评分。

另外一个示例是通过 requests 实现在 GitHub 上搜索某个关键词,并获取前 10 个搜索结果:

import requests
from bs4 import BeautifulSoup

url = 'https://github.com/search'
headers = {
    'User-Agent': 'Mozilla/5.0'
}
params = {
    'q': 'python',
    'type': 'Repositories'
}
r = requests.get(url, headers=headers, params=params)
soup = BeautifulSoup(r.text, 'html.parser')
items = soup.find_all('li', class_='repo-list-item')
for item in items[:10]:
    name = item.find('a', class_='v-align-middle').text.strip()
    desc = item.find('p', class_='mb-1').text.strip()
    link = item.find('a', class_='v-align-middle')['href']
    print('名称:{},简介:{},链接:{}'.format(name, desc, link))

上述代码使用 requests 模块发送 GET 请求,并传递了 params 参数来搜索 GitHub 上与关键字 python 相关的仓库,使用 BeautifulSoup 解析 HTML 代码,并获取仓库名称、简介和链接信息。最后打印出前 10 个搜索结果。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python用requests模块实现动态网页爬虫 - Python技术站

(0)
上一篇 2023年5月14日
下一篇 2023年5月14日

相关文章

  • python使用requests POST提交一个键多个值方式

    在Python中,我们可以使用requests库的post方法来提交HTTP POST请求。如果需要提交一个键对应多个值的数据,我们可以使用字典的方式来实现。以下是Python使用requests POST提交一个键多个值方式的完整攻略。 方法一:使用列表作为值 我们可以使用列表作为值,将多个值存储在列表中,然后将该列表作为值传递给键。以下是一个示例: im…

    python 2023年5月15日
    00
  • Python常用算法学习基础教程

    Python常用算法学习基础教程 本攻略将介绍Python常用算法的基础知识,包括排序算法、查找算法、递归算法等。我们将使用示例代码来演示这些算法的实现过程。 排序算法 冒泡排序 冒泡排序是一种简单的算法,它的基本思想是通过相邻元素之间的比较和交换来把小的元素逐步“冒泡”到数组的顶端。以下是示例代码,演示如何实现冒泡排序: def bubble_sort(a…

    python 2023年5月13日
    00
  • 详解Python 函数式编程设计模式

    Python函数式编程设计模式是指使用函数式编程思想和技术实现的一种设计模式。函数式编程设计模式以函数为核心,通过使用高级函数、lambda表达式和闭包等技术实现代码的抽象、复用和组合。以下是Python函数式编程设计模式的完整攻略。 1. 高阶函数 在函数式编程设计模式中,函数是一等公民,即函数可以作为参数传递给另一个函数,也可以作为返回值返回给调用者。这…

    python-answer 2023年3月25日
    00
  • python学生信息管理系统(完整版)

    Python学生信息管理系统(完整版)攻略 一、需求分析 本系统需要实现的功能需求如下: 添加学生信息 删除学生信息 修改学生信息 查询学生信息 显示所有学生信息 保存学生信息到文件 从文件中读取学生信息 二、系统实现 2.1 面向对象设计 我们采用面向对象的设计思路,将学生信息存储到一个列表中,每个学生信息是一个字典,包含以下字段: 学生姓名(name) …

    python 2023年5月30日
    00
  • Python for循环你了解吗

    Python中的for循环是常见的循环结构之一,它可以依次遍历序列类型的数据元素,比如列表、元组、字符串等。 语法 for 变量 in 可迭代对象: # 循环体 其中,变量表示当前遍历的元素,可迭代对象表示要遍历的数据序列。冒号后面的部分为循环体,需要缩进表示属于循环范围内的代码块。 示例一:遍历列表 fruits = [‘apple’, ‘banana’,…

    python 2023年6月3日
    00
  • 爬虫常用库的安装

    urllib 库 urllib.request库 re库 以上三个基本上python3内置   剩下的用第三方pip安装 1、pip install requsets >>>import requests >>>requests.get(‘http://www.baidu.com’) 返回响应status   2、pip …

    爬虫 2023年4月13日
    00
  • Python定时任务框架APScheduler安装使用详解

    Python定时任务框架APScheduler安装使用详解 一、概述 APScheduler是Python的一个开源的任务调度框架,可以用来执行定时任务、循环任务、一次性任务等。 APScheduler支持多种存储模式,并且提供了灵活的RESTful API和WebSocket接口,可以实现与其他服务进行交互。同时,APScheduler是跨平台和可扩展的,…

    python 2023年6月5日
    00
  • Python实现把多维数组展开成DataFrame

    当我们处理多维数组时,可能需要将其展开成一维数组或一个 DataFrame,这是很常见的需求。在 Python 中,我们可以使用 Numpy 或 Pandas 完成这个任务。本文将介绍如何用 Python 将多维数组展开成 Pandas DataFrame。 步骤 导入 Pandas 和 Numpy 库 import pandas as pd import …

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部