4.Python网络爬虫—使用Urllib库爬取数据

本文详细介绍了如何使用Python的Urllib库进行网络爬虫,包括基本的HTTP请求、Request对象的使用、实战项目中爬取今日头条搜索结果中的图片和视频链接,以及如何结合selenium处理更复杂的网页内容。

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

一·前言

在这里插入图片描述

Urllib是Python的一个内置库,专门用于处理HTTP请求。这个库包含四个主要模块:

request:这是Urllib库中最基本的HTTP请求模块。使用该模块,你可以模拟发送各种HTTP请求,如GET、POST等。它允许你通过编程方式与Web服务器进行交互,获取或上传数据。
error:此模块负责处理在HTTP请求过程中可能出现的错误。如果在请求过程中遇到问题,比如网络连接失败、服务器返回错误代码等,error模块可以帮助你捕获这些异常,并据此采取相应的措施,例如重新发送请求或者输出错误信息。
parse:这个模块提供了一些函数和方法来解析URLs。你可以利用它提取URL的不同组成部分,如协议、主机名、路径和查询参数等。此外,还可以解析HTML页面中的链接、表单等元素。
robotparser:尽管这个模块不如其他三个常用,但它用于解析网站的robots.txt文件。这些文件指导网络爬虫哪些页面可以抓取,哪些不可以。如果你正在开发一个网络爬虫,robotparser可以帮助你避免违反网站的爬取规则。
在这里插入图片描述

二·入门案例

网页爬取,也被称为网页抓取或网络爬虫,是一种从互联网上自动获取信息的技术。它通过模拟浏览器的行为,向服务器发送请求并接收响应,然后解析响应内容以提取所需的数据。

在Python中,我们可以使用Urllib库来实现网页爬取。Urllib是Python的一个内置库,专门用于处理HTTP请求。这个库包含四个主要模块:request、error、parse和robotparser。其中,request模块是最基本的HTTP请求模块,可以用来模拟发送各种HTTP请求,如GET、POST等。

下面是一个使用Urllib库爬取网页的简单示例:

from urllib.request import urlopen

response = urlopen("http://www.baidu.com")
print(response.read().decode())

这段代码首先导入了urlopen函数,然后使用这个函数向"http://www.baidu.com"发送了一个GET请求,并将返回的响应对象存储在response变量中。最后,我们调用response的read方法读取响应的内容,并使用decode方法将其从字节串解码为字符串,然后打印出来。

执行这段代码,将看到百度首页的HTML源代码被打印出来。这就是网页爬取的基本过程。

三·常用方法

Urllib库是Python的一个内置库,专门用于处理HTTP请求。这个库包含四个主要模块:request、error、parse和robotparser。其中,request模块是最基本的HTTP请求模块,可以用来模拟发送各种HTTP请求,如GET、POST等。

request.urlopen()方法是用来打开URL的,它有三个参数:url、data和timeout。url参数是必须的,表示要访问的网址;data参数是可选的,表示要传送的数据,默认为None;timeout参数也是可选的,表示设置超时时间,默认为socket._GLOBAL_DEFAULT_TIMEOUT。这个方法会返回一个response对象,包含了服务器的响应信息。

response.read()方法是用来读取服务器响应的全部内容,返回的是bytes类型。

response.getcode()方法是用来获取HTTP的响应码,成功返回200,4表示服务器页面出错,5表示服务器问题。

response.geturl()方法是用来获取实际数据的实际URL,防止重定向问题。

response.info()方法是用来获取服务器响应的HTTP报头。

四·Request对象

Urllib库是Python的一个内置库,专门用于处理HTTP请求。这个库包含四个主要模块:request、error、parse和robotparser。其中,request模块是最基本的HTTP请求模块,可以用来模拟发送各种HTTP请求,如GET、POST等。

request.urlopen()方法是用来打开URL的,它可以接受一个Request类的实例作为参数。Request类在构造时需要传入Url、Data等信息。例如,我们可以这样改写上面的代码:

from urllib.request import urlopen
from urllib.request import Request

request = Request("http://www.baidu.com")
response = urlopen(request)
print(response.read().decode())

这段代码首先导入了urlopen函数和Request类,然后创建了一个Request对象,并将其传递给urlopen函数。最后,我们调用response的read方法读取响应的内容,并使用decode方法将其从字节串解码为字符串,然后打印出来。

这种方式在构建请求时可以加入更多的内容,使得逻辑更加清晰明确。

五·实战项目

import requests
import time
from selenium import webdriver


base_url = 'https://www.toutiao.com/api/search/content/'
timestamp = int(time.time()*1000)
article_url_list = []
browser = webdriver.Chrome()


# 获取到一个页面内所有的article url
def get_article_urls():
    for offset in range(0, 120,
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值