python3使用requests模块爬取页面内容的实战演练

当我们想要爬取网页数据时,Python的requests模块可以说是必不可少的一个工具。下面是使用Python3中requests模块爬取页面内容的实战演练的完整攻略。

1. 准备工作

首先,我们需要安装Python的requests模块。在命令行中输入以下命令进行安装:

pip3 install requests

在这里,我们还需要一个网站,作为我们的爬取目标。

假设我们要爬取的网站是这个网站:https://www.jianshu.com/c/bDHhpK

2. 基本使用方法

2.1 发送get请求

我们可以使用requests模块中的get方法来发送get请求,获取网页的内容。

import requests

url = 'https://www.jianshu.com/c/bDHhpK'

response = requests.get(url)

print(response.text)

在上面的代码中,我们使用requests模块发送了一个get请求,并将响应的内容作为字符串打印出来。

2.2 发送post请求

我们也可以使用requests模块发送post请求,获取网页的内容。

import requests

url = 'https://www.jianshu.com/search/do'

data = {
    'q': 'Python',
    'page': '1',
    'type': 'notebook'
}

response = requests.post(url, data=data)

print(response.text)

在上面的代码中,我们使用requests模块发送了一个post请求,并将响应的内容作为字符串打印出来。我们还传递了一个data参数,它包含了我们要发送的数据。

3. 常见问题及解决方法

3.1 UnicodeDecodeError

当我们用requests模块爬取网页内容时,有时候会遇到UnicodeDecodeError的错误。这是因为网页的编码格式可能是其他的编码格式,如gb2312、GBK等,而不是我们常见的utf-8。解决方法是在get或post请求中添加headers参数,将编码格式设置为网页的编码格式。

import requests

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

headers = {
    'Accept-Encoding': 'gzip, deflate, sdch',
    'Accept-Language': 'zh-CN,zh;q=0.8',
    'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36'
}

response = requests.get(url, headers=headers)

print(response.content.decode('gb2312'))

在上面的代码中,我们设置了headers参数,并且在decode方法中指定了gb2312编码格式来解码网页内容。

3.2 网页参数动态生成

有些网页的参数是动态生成的,这时我们需要使用一些工具来分析网页,获取相关参数的值。然后在爬虫代码中手动传递这些参数。

例如,我们要爬取微博搜索的相关页面,调用接口时需要先请求https://weibo.com,并抓取其中的一些关键参数。

import requests
from bs4 import BeautifulSoup

url = 'https://weibo.com/'
search_url = 'https://s.weibo.com/weibo?q={}&typeall=1&suball=1&timescope=custom:{}:{}&Refer=g'

session = requests.Session()

# 先请求http://weibo.com/获取一些关键参数
response = session.get(url)

soup = BeautifulSoup(response.text, 'html.parser')
scripts = soup.find_all('script')
for script in scripts:
    if 'pl_login_form' in script.text:
        # 获取st参数
        st_index = script.text.index('STK') + 6
        ed_index = script.text.index(',', st_index)
        st = script.text[st_index:ed_index].strip().strip('\'')

        # 获取pcid参数
        pcid_index = script.text.index('PCID') + 7
        ed_index = script.text.index(',', pcid_index)
        pcid = script.text[pcid_index:ed_index].strip().strip('\'')

        headers = {
            'referer': url
        }
        cookies = {
            'SUB': '...',
            'SCF': '...',
            'SSOLoginState': '...',
            'SUHB': '...',
            'ALF': '...',
            'wvr': '6'
        }
        session.headers.update(headers)
        session.cookies.update(cookies)
        response = session.get(search_url.format('Python', '2021-01-01', '2021-01-02'))

        print(response.text)

在上面的代码中,我们使用requests.Session类,这是为了将一些关键参数保存到会话中,方便之后的请求使用。我们还使用了BeautifulSoup来解析网页,找到关键参数的值。然后,我们使用了格式化字符串,将搜索关键字、时间等参数传递到请求中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python3使用requests模块爬取页面内容的实战演练 - Python技术站

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

相关文章

  • 详解Python爬取并下载《电影天堂》3千多部电影

    详解Python爬取并下载《电影天堂》3千多部电影 0. 简介 本文主要介绍如何使用Python来爬取并下载电影天堂网站上的电影资源,包括如何从首页获取分类信息和对应的电影列表,如何从电影列表页获取详细的电影信息和下载链接,并使用迅雷进行自动下载。 1. 准备工作 在进行爬取之前,需要安装一些必要的Python库和工具: BeautifulSoup4: 用于…

    python 2023年5月14日
    00
  • Python代码实现列表分组计数

    在Python中,列表分组计数是一种常见的操作。本文将详细讲解如何使用Python实现列表分组计数。 方法一:使用collections模块的Counter类 Python中的collections模块提供了一个Counter类可以用于计数。可以使用Counter类来实现列表分组计数。下面是一个示例: # 示例1:使用collections模块Counter…

    python 2023年5月13日
    00
  • 详解python3 GUI刷屏器(附源码)

    我来详细讲解一下“详解python3 GUI刷屏器(附源码)”的完整攻略。 标题 首先,我们需要了解这篇攻略的标题,包括: 标题应该简洁明了,能够准确概括文章内容; 使用#号进行标题级别的区分,一级标题为#,二级标题为##,以此类推。 简介 本攻略讲解的是如何使用Python3编写GUI刷屏器,代码已经附上。在学习过程中,我们会使用到Python3的GUI模…

    python 2023年6月13日
    00
  • Python 爬虫使用固定代理IP

    购买的固定代理IP一般都需要账号密码, 在网上找了几个使用方法,但是都报错,所以,就想了这个笨办法,如有好办法希望大家指点。 import requests from requests.auth import HTTPBasicAuth proxy = { ‘http’: ‘http://ip:port’, ‘https’: ‘https://ip:port…

    爬虫 2023年4月11日
    00
  • Python列表去重的几种方法整理

    Python列表去重的几种方法整理 在Python中,列表去重是一个常见的操作。本文将介绍Python列表去重的几种方法,包括使用set()函数使用列表推导式、使用字典、使用numpy库等方法。 使用set() set()函数是Python中去重的常用方法。set()函数可以列表转换为集合,由于集合中的元素是唯一的,因此可以实现去重的效果。以下是一个示例代码…

    python 2023年5月13日
    00
  • python爬虫 – js逆向之猿人学第十九题突破ja3指纹验证

    前言 废话不多说,直接干,再来猿人学19题     分析   看了下,没有加密参数:   然后拿着接口直接请求:    有结果的,不会吧,这么简单?没有加密参数?这次这么草率?   用代码访问,唉,卧槽,就是他妈的不行,果然有猫腻      换requests:    确实不行,   用postman看看,可以的     这他妈就很秀啊,上一次这种感觉还是h…

    爬虫 2023年4月12日
    00
  • 正则表达式+Python re模块详解

    正则表达式+Python re模块详解 正则表达式是一种强大的文本处理工具,可以用于各种文本处理任务,如数据清洗、文本分析、信息提取等。在Python中,我们可以使用re模块来操作正则表达式。本攻略将详细讲解Python正则表达式的基本语法、常用函数和应用技巧,帮读者快速掌握正则表达式的用法。 正则表达式的基本语法 正则表达式是由普通字符元字符组成的字符串,…

    python 2023年5月14日
    00
  • python机器学习实现oneR算法(以鸢尾data为例)

    下面是详细讲解“Python机器学习实现oneR算法(以鸢尾data为例)”的完整攻略,包括算法原理、Python实现代码和两个示例说明。 算法原理 oneR算法是一种简单的分类算法,它通过统计每个特征的每个取值在不同类别中出现的频率,选择出现频率最高的特征和取值作为分类规则。具体来说,oneR算法的步骤如下: 对于每个特征统计每个取值在不同类别中出现的频率…

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