Day29.爬虫基础之Urllib

转化天文台年历:打造 1901–2100 农历与节气数据库 本文介绍了一种高效的农历与节气计算方法,通过压缩存储1901-2100年间的阴阳历数据,仅需3KB Flash空间即可实现快速转换。核心方法包括: 设计24位农历状态码,包含闰月信息、13个月大小月标记和春节日期 将每月两个节气日期压缩为1字节(各4位存储与15日的偏移量) 从 阅读详情

爬虫基础之Urllib



前言

本文主要是了解一下Urllib库在爬虫中的简单使用。


一. 什么是Urllib?

Urllib是Python内置的HTTP请求库。我们在爬虫的过程中主要是使用以下几个模块:

主要的模块主要的功能
urllib.request请求模块
urllib.error异常处理模块
urllib.parseurl解析模块
urllib.robotparserrobots.txt解析模块

二. Urllib 用法详解

2.1 urlopen

主要的参数展示:

urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False, context=None)

简单使用:

import urllib.request

response = urllib.request.urlopen("http://www.baidu.com")
print(response.read().decode("utf-8"))

# +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ #
import urllib.parse
import urllib.request

# 将输入的关键词写入,在特定的测试网站"http://httpbin.org/post"
data = bytes(urllib.parse.urlencode({"word": "hello"}), encoding="utf-8")
response = urllib.request.urlopen("http://httpbin.org/post", data=data)
print(response.read())

在这个字典里面可以发现: “form”: {\n “word”: “hello”\n }, 也就是我们刚才输入的关键词。

# 不同于上面,这里使用 get 请求,而且添加了响应的时间
response = urllib.request.urlopen("http://httpbin.org/get", timeout=1)
print(response.read())

另外一种:

import socket
import urllib.error

try:
    response = urllib.request.urlopen("http://httpbin.org/get", timeout=0.1)
except urllib.error.URLError as e:
    if isinstance(e.reason, socket.timeout):
        print("TIME OUT!")

2.2 响应

# 响应类型
response = urllib.request.urlopen("http://www.python.org")
print(type(response))

# 状态码,响应头
response = urllib.request.urlopen("https://www.python.org")
print(response.status)
print(response.getheaders())
print(response.getheader("Server"))

print(response.read().decode("utf-8"))


from urllib import request, parse

url = "http://httpbin.org/post"
headers = {
    'User-Agent': 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)',
    'Host': 'httpbin.org'
}

dict_info = {
    'name': 'Germey'
}

data = bytes(parse.urlencode(dict_info), encoding="utf-8")
req = request.Request(url=url, data=data, headers=headers, method="POST")
response = request.urlopen(req)
print(response.read().decode("utf-8"))


url = 'http://httpbin.org/post'
dict_info = {
    'name': 'Germey'
}

data = bytes(parse.urlencode(dict_info), encoding='utf8')
req = request.Request(url=url, data=data, method='POST')
req.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)')
response = request.urlopen(req)
print(response.read().decode('utf-8'))

2.3 Handler

# 代理:设置可用的代理,以代理的IP进行爬取
proxy_handler = urllib.request.ProxyHandler({
    "http": "http://127.0.0.1:9743",
    "htpps": "https://127.0.0.1:9743"
})

opener = urllib.request.build_opener(proxy_handler)
response = opener.open("http://httpbin.org/get")
print(response.read())


# Cookie
import http.cookiejar, urllib.request

cookie = http.cookiejar.CookieJar()
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open("http://www.baidu.com")
for item in cookie: print(item.name + "=" + item.value)
# print(response.)


filename = "cookie.txt"
cookie = http.cookiejar.MozillaCookieJar(filename)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open("http://www.baidu.com")
cookie.save(ignore_discard=True, ignore_expores=True)

filename = 'cookie.txt'
cookie = http.cookiejar.LWPCookieJar(filename)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.baidu.com')
cookie.save(ignore_discard=True, ignore_expires=True)

cookie = http.cookiejar.LWPCookieJar()
cookie.load('cookie.txt', ignore_discard=True, ignore_expires=True)
handler = urllib.request.HTTPCookieProcessor(cookie)
opener = urllib.request.build_opener(handler)
response = opener.open('http://www.baidu.com')
print(response.read().decode('utf-8'))

可以详细对比一下几组代码的区别。

2.4 异常处理

from urllib import request, error
try:
    response = request.urlopen("https://mp.csdn.ne")
except error.URLError as e:
    print(e.reason)


try:
    response = request.urlopen("http://csdn.ne")
except error.HTTPError as e:
    print(e.reason, e.code, e.headers, sep="\n")
except error.URLError as e:
    print(e.reason)
else:
    print("Request Successfully!")

try:
    response = urllib.request.urlopen('https://www.baidu.com', timeout=0.01)
except urllib.error.URLError as e:
    print(type(e.reason))
    if isinstance(e.reason, socket.timeout):
        print('TIME OUT')

对于不同的情况,会返回不同的内容,主要还是由于错误的情况不同,可以根据反馈修改代码。

2.5 URL解析

urlparse函数展示:
urllib.parse.urlparse(urlstring, scheme=’’, allow_fragments=True)

from urllib.parse import urlparse

result = urlparse("http://www.baidu.com.index.html;user?id=5#comment")
print(type(result), result)
# 发现几个参数scheme,netloc,path,params,query,fragment.


result = urlparse('www.baidu.com/index.html;user?id=5#comment', scheme='https')
print(result)
# 对比上面发现,在url里面没scheme时,我们可以自己设定。


result = urlparse('http://www.baidu.com/index.html;user?id=5#comment', scheme='https')
print(result)
# 对比上面,在url中存在scheme又设定时,以url中的为准。


result = urlparse('http://www.baidu.com/index.html;user?id=5#comment', allow_fragments=False)
print(result)
# 这里设定allow_fragments=False,发现输出中fragment为空。


result = urlparse('http://www.baidu.com/index.html#comment', allow_fragments=False)
print(result)

上面的解析结果(ParseResult)中有scheme,netloc,path,params,query,fragment。这几种参数,在给定的url中,不同特殊的符号会改变这些参数的赋值。

# urlunparse

from urllib.parse import urlunparse

data = ["http", "www.baidu.com", "index.html", "user", "a=6", "comment"]
print(urlunparse(data))
# 这样可以帮你自动构造(拼接)一个url。

# urljoin
from urllib.parse import urljoin

print(urljoin('http://www.baidu.com', 'FAQ.html'))
print(urljoin('http://www.baidu.com', 'https://cuiqingcai.com/FAQ.html'))
print(urljoin('http://www.baidu.com/about.html', 'https://cuiqingcai.com/FAQ.html'))
print(urljoin('http://www.baidu.com/about.html', 'https://cuiqingcai.com/FAQ.html?question=2'))
print(urljoin('http://www.baidu.com?wd=abc', 'https://cuiqingcai.com/index.php'))
print(urljoin('http://www.baidu.com', '?category=2#comment'))
print(urljoin('www.baidu.com', '?category=2#comment'))
print(urljoin('www.baidu.com#comment', '?category=2'))
# 上面主要是两个网址的拼接。前面没有时就拼接,后面有时,会出现后面覆盖前面的网址。


# urlencode:也可以做参数的拼接。
from urllib.parse import urlencode

params = {
    "name": "germey",
    "age": 22
}

base_url = "http://www.baidu.com?"
url = base_url + urlencode(params)
print(url)


总结

今天主要是学习了Urllib库的常见使用,以及四个主要的模块的一些详细使用,也有一些案例的代码,感兴趣的小伙伴可以在深入看看。

溜了遛了,脑壳疼。Loading(29/100)。。。

SAP前台处理:业务伙伴维护(客户主数据和供应商主数据)之基础视图 <BP> 这里主要讲解BP业务伙伴主数据中和财务相关的一些内容,包括基础视图数据,采购视图数据,销售视图数据,公司代码视图数据; S4统一了供应商和客户,从事务代码上:不再使用FD01和FK01进行维护,而使用事务代码BP统一维护; 阅读详情

相关推荐

C#中的Chart控件——当数据源很多时可以显示进度条拉动观察,也可以记录到后台文本详细对照

C#中的Chart控件——当数据源很多时可以显示进度条拉动观察,也可以记录到后台文本详细对照下面进行详细步骤说明,感兴趣的同学可以看一下: 1简单示例(一条线): 2.数据源随着时间不断变化,进度条变化 。多条线: 3.看在整段时期内的数据大体图(消去或出现)进度条: 4.后台将时刻记录变化记录到一个txt文本里以供详细校验: 话不多说上码: using System; using Sys...

帅boy的博客 4308

自学python Day2-python爬虫1 - 2018.4.29

前言:没办法。。刚装完python和django就要学爬虫了,打算一边照猫画虎写爬虫,一边回头补python语言。搜了一圈知乎,觉得有一篇文章比较全面,开整!学习根据资料:Python3.x爬虫学习资料整理  https://zhuanlan.zhihu.com/p/24358829同时又要到了公司的爬虫产品的几句技术栈描述,打算结合知乎这篇文章和公司技术栈来写第一章  用Python 3开发网络...

deo_ares的博客 607

WPS制作甘特图实操(带图超详细)

一、数据准备 图1 二、添加公式 在表格的E3处添加公式:=IF(C3>=G3,0,IF(C3+D3>=G3,G3-C3,D3)),点击该单元格的右下角。使鼠标箭头变“+”后下拉拖拽,复制该公式。F3处的公式为:=D3-E3,使用相同的拖拽方式复制公式应用,操作完毕如下图3. 图2 图3 三、插入图表 1、选中方框1内容,按住ctrl按键,继续选择2、3列的内容,点击插入全部图表中的条形图,选择2对应的图标样式,生成图6的样式。 点击图6中的3标尺,右击选择数据弹出图8,点击+号选择表格中

m0_49047167的博客 3万+

爬虫学习Day_01

爬虫urlib库,request库,简易反反爬,抓包工具

wuliwavv的博客 1682

ESP32-P4开发板实战:从零配置VSCode环境到点亮MIPI-DSI屏幕(避坑指南)

本文详细介绍了ESP32-P4开发板在VSCode环境下的配置流程,包括SDK安装、idf_component.yml依赖管理,以及MIPI-DSI屏幕驱动的实现方法。通过实战指南帮助开发者避开常见配置陷阱,快速完成从环境搭建到屏幕点亮的全流程,适用于物联网和嵌入式开发场景。

pp12345的博客 742

开关电源EMC整改实录:用WSX系列共模电感搞定30MHz辐射超标

本文详细介绍了开关电源EMC整改实战,通过WSX系列共模电感成功解决30MHz频段辐射超标问题。文章分析了共模干扰的产生机制,对比了不同磁芯材料的性能差异,并提供了电路布局优化与安装技巧,最终通过实测数据验证了整改方案的有效性。

weixin_29305313的博客 415

Python项目-Day42-urllib基础-handler-opener()

Python项目-Day42-urllib基础-handler-opener() urlopen() 在python2.x版本中可以直接使用import urllib来进行操作,但是python3.x版本中使用的是import urllib.request来进行操作 GET请求 urllib的request模块可以非常方便地抓取URL内容,也就是发送一个GET请求到指定的页面,然后返回HT...

qq_37892223的博客 412

【论文汇总】Diffusion Models视频生成/视频编辑/可控视频生成/跨模态视频生成

本文总结了Diffusion Models视频生成领域相关的工作,目前共收录142篇,持续更新中。

沉迷单车的追风少年 1672

【Python网络爬虫四】通过关键字爬取多张百度图片的图片

最近看了女神的新剧《逃避虽然可耻但有用》,同样男主也是一名程序员,所以很有共鸣 被大只萝莉萌的一脸一脸的,我们来爬一爬女神的皂片。 百度搜索结果:新恒结衣 本文主要分为4个部分:   1.下载简单页面   2.爬取多张图片   3.页面解码   4.爬取过程排错处理 1.下载简单页面 通过查看网页的html源码,分析得出,同一张图片共有4种链接: ...

883

【AI大模型:认知升级】1、全面解析AI大模型:从起源到发展脉络与应用价值

AI大模型是具备超大规模参数(千亿至万亿级)、海量训练数据(TB级)和强迁移学习能力的基础模型。其技术特征包括Transformer架构革新、大数据预训练范式及参数规模超过临界值后的能力涌现。发展历程经历了语言模型突破(2018-2020)、多模态融合(2021-2023)和架构创新(2023至今)三波浪潮,遵循数据、算力、算法协同进化规律。底层驱动因素包括能力涌现机制、算力基础设施突破和应用场景拓展,正在重构产业价值链。通过"知识星系""认知

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 2292

小论文/大论文必备 | RT-DETR目标检测、数据集增强 | 引入多种数据集增强方法,支持图像和标签同步扩充增强,助力小论文和大论文实验涨点策略,平均提升模型mAP约1-2个百分点

RT-DETR目标检测数据增强策略研究 ,本文针对RT-DETR目标检测模型提出9种数据增强方法,包括几何变换(水平/垂直翻转、中心裁剪)、光照调整(亮度、对比度)和噪声添加(高斯/椒盐噪声)等。所有增强操作均保持图像与标签同步变换,确保训练数据的准确性。实验表明,该策略可提升模型mAP 1-2个百分点,对小目标检测效果尤为显著。文中提供了完整的Python实现代码,支持批量处理图像和标签文件,并详细说明了各增强方法的功能特点。该方法通过提升数据多样性,有效增强了模型在复杂场景下的鲁棒性和泛化能力。

Ai缝合怪、助力小伙伴高效发论文 460

python万能爬虫_新手必看|超实用Python爬虫案例集锦

世界上80%的爬虫是基于Python开发的,学好爬虫技能,可为后续的大数据分析、挖掘、机器学习等提供重要的数据源。无私分享全套Python爬虫资料,私信“学习”免费领取哦~~作为产品运营人员,在工作中处理数据,分析数据和运用数据,基本是常态。虽非数据分析岗位,但是也是一个要重度应用数据的岗位,如果自身没有获取数据的能力,其实是非常尴尬的。什么是爬虫?按照一定的规则,指请求网站并获取数据的自动化程序...

weixin_39614276的博客 341

数据分享|2023年OSM道路数据(全国,分省,分市)

首先这个工作非常有必要的,因为我们正常使用的道路的分类都是基于包括城市快速路、城市主干路、城市次干路这个体系的,大家对于这个分类体系应该更熟悉,但是OSM地图的道路分类又不是完全按这个来的,所以非常有必要重新分类;搞清楚道路类型是我们使用道路数据做很多工作的基础,比如我们在使用道路数据的时候,经常需要预估道路的行车速度,而这个速度一般就是根据道路类型来的,比如高架路的车速肯定就比城市支路快很多!下载分为两种情况,第一种是下载小区域的数据,比如下载一个街区的数据,第二种为下载整个中国范围的。

JData_Engineer的博客 4306

Python爬虫学习,抓取网页上的天气信息

# coding : UTF-8 import sys reload(sys) sys.setdefaultencoding( "utf-8" ) from bs4 import BeautifulSoup import csv import urllib def get_html(url): html = urllib.urlopen(url) return html.read()

rjq235的专栏 3965

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【廖雪峰】python爬虫------------------学习记录day04(爬取“个人中心”、request 模块)

## 爬取“个人中心” 1、添加cookie 登陆成功 手动登录 点击Network珠宝 粘贴复制 登录成功后的cookie headers = {‘cookie’:’’} Request(headers=) """ 爬取“个人中心” 1、添加cookie 登陆成功 手动登录 点击Network珠宝 粘贴复制 登录成功后的cookie headers = {'cookie':''} Request(headers=) """ import urllib.request #1、数据url url = "h

weixin_46061565的博客 335

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

python爬取多张图片_【Python网络爬虫四】通过关键字爬取多张百度图片的图片

最近看了女神的新剧《逃避虽然可耻但有用》,同样男主也是一名程序员,所以很有共鸣被大只萝莉萌的一脸一脸的,我们来爬一爬女神的皂片。百度搜索结果:新恒结衣本文主要分为4个部分:1.下载简单页面2.爬取多张图片3.页面解码4.爬取过程排错处理1.下载简单页面通过查看网页的html源码,分析得出,同一张图片共有4种链接:{"thumbURL":"http://img5.imgtn.bdimg.com/it...

weixin_39646688的博客 623

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

爬虫小程序(实习僧网抓取数据)

# -*- coding:utf-8 -*- import re import urllib import urllib2 import time from pyExcelerator import * """ User_Agent = 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0' head

业精于勤,荒于嬉;行成于思,毁于随。 1697

Python爬虫获取迅雷会员帐号

代码如下: 1 import re 2 import urllib.request 3 import urllib 4 import time 5 6 from collections import deque 7 8 head = { 9 'Connection': 'Keep-Alive', 10 'Accept': 'text/...

weixin_30457465的博客 498

5 python 页面说明_Python学习教程:关于数据采集和解析的详细讲解

Python学习教程:数据采集和解析通过上一个章节的讲解,我们已经了解到了开发一个爬虫需要做的工作以及一些常见的问题,下面我们给出一个爬虫开发相关技术的清单以及这些技术涉及到的标准库和第三方库,稍后我们会一一介绍这些内容。下载数据 - urllib / requests / aiohttp。解析数据 - re / lxml / beautifulsoup4 / pyquery。缓存和持久化 - p...

weixin_28955929的博客 91

Python 基础实战 -- 爬虫(天气查询系统)

1 #需求:查询地区天气 2 #分析:第一步,抓取上面所有的天气信息 3 4 from html.parser import HTMLParser 5 from urllib import request 6 import pickle 7 import json 8 9 #解析中国天气网HTML 10 class WeatherHt...

weixin_33796177的博客 246

A股股票数据爬虫实战:协议层+解析层+数据治理三阶构建

Web爬虫本质上是客户端与服务端之间的协议交互系统,其核心在于HTTP请求构造、HTML/JS内容解析与结构化数据治理。在金融数据场景中,尤其面对A股行情、F10资料等高时效、强反爬目标,单纯依赖requests或Selenium已无法满足稳定性与合规性要求。本文围绕真实生产级股票数据采集需求,深入解析User-Agent指纹模拟、sec-ch-ua等现代请求头工程实践,对比XPath、CSS Selector与正则表达式的适用边界,并强调数据清洗、逻辑校验与缺失插补等数据治理环节。聚焦Data Scien

weixin_34216196的博客 421

爬虫day2 (代理ip访问----人人网登录 //手动添加cookie/、实时存储cookie//封装类-----有道翻译 加盐破解)

通过代理ip访问 #通过代理ip访问 from urllib import request proxy = { 'http':'http://219.141.153.41:80' } # 实例 一个操作(储存代理ip) handler = request.ProxyHandler(proxy) # 实例 request对象 opener(绑定以上操作) opener = reque...

lhl1110的博客 677

今日头条网页图片爬取

1 import requests,os,json,re 2 from urllib import request 3 from day3.mysql_text import mysql_conn 4 for i in range(0,60,20): 5 url = 'https://www.toutiao.com/search_content/?offset={}&...

weixin_30765505的博客 221

《鲜活的数据:数据可视化指南》第2章 收集数据 Python3.3源码

全部源码和数据文件下载:仅供参考 《鲜活的数据:数据可视化指南》书中的python代码为2.x,在看书过程中把部分源代码转换为Python3.3格式。 运行环境:Windows7, Python3.3 (1) get-weather-data.py 从网页抓取天气信息(类似于小爬虫) 说明:主要修改包括urllib2的变化,timestamp的修改,采集数据的地点,...

dianpi8337的博客 256

Python执行js (PyExecJS/node.js/Playwright/STPyV8/quickjs)、google翻译、百度翻译、有道翻译、百度指数

Python执行js (PyExecJS/node.js/Playwright/STPyV8/quickjs)、google翻译、百度翻译、有道翻译、百度指数

freeking101的博客 3099

pythonのgevent同步异步区别

1 #!/usr/bin/env python 2 3 from urllib import request 4 import gevent 5 from gevent import monkey 6 import time 7 8 monkey.patch_all() # 把当前程序所有的IO操作给我单独的做上标记。 9 def f(url): 1...

weixin_30567225的博客 111
上一篇: Day28.爬虫的基本原理
下一篇: Day30.爬虫基础之Requests
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值