python中运用urllib.request简单抓取网页数据

2023-05-16

urllib.request

1、抓取百度首页


 1 from urllib import request
 2 
 3 #url
 4 #根据url获取数据,下载数据到本地
 5 #正则orXpath处理数据
 6 #数据转储
 7 
 8 url = 'http://www.baidu.com/'
 9 #获取数据
10 response = request.urlopen(url)
11 #读取数据
12 html_bytes = response.read()
13 #数据写入文件
14 with open('html_bytes','wb') as fb:
15     fb.write(html_bytes)
16 # print(response.read().decode('utf-8'))  

2、抓取西刺代理首页


from urllib import request
from urllib.error import HTTPError, URLError
# url = 'http://www.xicidaili.com/'
# #若出现urllib.error.HTTPError: HTTP Error 503: Service Temporarily Unavailable
# #用以下方式处理,参数中添加form
# user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
# headers = {
#     'User-Agent': user_agent
# }
# #定义Request
# req = request.Request(url,headers=headers)
# response = request.urlopen(req)
# print(response.read().decode('utf-8'))
#封装成函数
def urlrequest(url,headers=None):
    user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
    if headers == None:
        headers = {
            'User-Agent': user_agent
        }
    # 定义Request
    try:
        req = request.Request(url,headers=headers)
        response = request.urlopen(req)
        html_bytes = response.read()
        return html_bytes
    except HTTPError as e:
        return e
    except URLError as e:
        return e
    
if __name__ == '__main__':
  #测试
print(urlrequest('http://www.baidu.com/').decode('utf-8')) print(urlrequest('http://www.xicidaili.com/').decode('utf-8'))

3、GET、POST请求


from urllib import request, parse
from urllib.error import HTTPError, URLError
import json

#get请求
def get(url, headers=None):
    return urlrequest(url, headers=headers)

#post请求
def post(url, form, headers=None):
    return json.loads(urlrequest(url, form, headers=headers))


def urlrequest(url, form=None, headers=None):
    html_bytes = b''
    #判断是否传入请求头
    if headers == None:
        user_agent = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
        headers = {
            'User-Agent': user_agent
        }
    try:
        #判断是否传入form
        if form:
            # 字典转bytes
            # 1、先转字符串
            form_str = parse.urlencode(form)
            # 2、转为bytes型
            form_bytes = form_str.encode('utf-8')
            # 定义Request
            req = request.Request(url, data=form_bytes, headers=headers)
        else:
            req = request.Request(url, headers=headers)
        response = request.urlopen(req)
        html_bytes = response.read()
        
    except HTTPError as e:
        print(e)
    except URLError as e:
        print(e)
    return html_bytes

if __name__ == '__main__':
    #post请求测试
    url = 'http://fanyi.baidu.com/sug/'
    form = {
        'kw':'呵呵'
    }
    html_dict = post(url,form=form)
    print(html_dict)
    print(html_dict['data'][0]['v'])
    
    #get请求测试
    url = 'http://www.python.org'
    html_bytes = get(url)
    print(html_bytes.decode('utf-8'))  

 4、有道翻译加盐破解


import time, random, json
from day01.tuozhan_all import post
#有道翻译加盐破解

def md5_my(need_str):
    import hashlib
    #创建MD5对象
    md5_o = hashlib.md5()
    #需要bytes类型作为参数
    sign_bytes = need_str.encode('utf-8')
    md5_o.update(sign_bytes)
    sign_str = md5_o.hexdigest()
    return sign_str

def trans(kw):
    #url
    url = 'http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule'
    #headers
    headers = {
            'Accept': 'application/json, text/javascript, */*; q=0.01',
            #'Accept-Encoding': 'gzip, deflate',
            'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.9',
            'Connection': 'keep-alive',
            #'Content-Length': '241',
            'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
            'Cookie': 'OUTFOX_SEARCH_USER_ID=1371246944@10.169.0.83; OUTFOX_SEARCH_USER_ID_NCOO=175172091.56957078; JSESSIONID=aaa6Z2lldaepL-EYrr4uw; ___rl__test__cookies=1534249690001',
            'Host': 'fanyi.youdao.com',
            'Origin': 'http://fanyi.youdao.com',
            'Referer': 'http://fanyi.youdao.com/',
            'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36',
            'X-Requested-With': 'XMLHttpRequest'
    }
    key = kw
    # salt : ((new Date).getTime() + parseInt(10 * Math.random(), 10))
    salt = int(time.time() * 1000 + random.randint(0, 10))
    salt_str = str(salt)
    S = "fanyideskweb"
    D = "ebSeFb%=XZ%T[KZ)c(sy!"
    sign_str = S+key+salt_str+D
    sign_md5_str = md5_my(sign_str)
    #form
    form = {
        'i': key,
        'from': 'AUTO',
        'to': 'AUTO',
        'smartresult': 'dict',
        'client': 'fanyideskweb',
        'salt': salt_str,
        'sign': sign_md5_str,
        'doctype': 'json',
        'version': '2.1',
        'keyfrom': 'fanyi.web',
        'action': 'FY_BY_REALTIME',
        'typoResult': 'false',
    }
    html_bytes = post(url, form, headers=headers)
    #将json格式数据转化为字典
    res_dict = json.loads(html_bytes.decode('utf-8'))
    print(res_dict)
    trans_res = res_dict['translateResult'][0][0]['tgt']
    return trans_res

if __name__ == '__main__':
    res = trans('青青河边草')
    print(res)  

5、人人网首页数据抓取


from urllib import request, parse
from urllib.error import HTTPError, URLError
from http import cookiejar
import json

class session(object):
    def __init__(self):
        # 1、实例化cookie对象
        cookie_obj = cookiejar.CookieJar()
        # 2、handler处理
        handler = request.HTTPCookieProcessor(cookie_obj)
        # 3、opener 遇到有cookie的response的时候,调用handler内部的一个函数, 存储到cookie object
        self.opener = request.build_opener(handler)
    def get(self,url, headers=None):
        return get(url, headers, self.opener)
    def post(self, url, form, headers=None):
        return post(url, form, headers, self.opener)
    
def get(url, headers=None, opener=None):
    return urlrequests(url, headers=headers, opener=opener)
def post(url, form, headers=None, opener=None):
    return urlrequests(url, form, headers=headers, opener=opener)
#b. post(url, form, headers=None)
#1. 传入url
#2. user_agent
#3. headers
#4. 定义Request
#5. urlopen
#6. 返回byte数组
def urlrequests(url, form=None, headers=None, opener=None):
    user_agent = 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36'
    # 如果用户需要自行传入headers, 则覆盖之前的headers
    if headers == None:
        headers = {
            'User-Agent': user_agent
        }
    html_bytes = b''
    try:
        if form:
            # POST
            # 2.1 转换成str
            form_str = parse.urlencode(form)
            #print(form_str)
            # 2.2 转换成bytes
            form_bytes = form_str.encode('utf-8')
            req = request.Request(url, data=form_bytes, headers=headers)
        else:
            
            req = request.Request(url, headers=headers)
        if opener:
            response = opener.open(req)
        else:
            response = request.urlopen(req)
        html_bytes = response.read()
    except HTTPError as e:
        print(e)
    except URLError as e:
        print(e)

    return html_bytes

if __name__ == '__main__':
    #测试--带cookies的请求
    url = 'http://www.renren.com/ajaxLogin/login?1=1&uniqueTimestamp=201872221746'
    form = {
        'email': '18573151260',
        'icode': '',
        'origURL': 'http: // www.renren.com / home',
        'domain': 'renren.com',
        'key_id': '1',
        'captcha_type': 'web_login',
        'password': '60a075bc14562c91baf36094ffe93d8fa9c1809a8501a43a7da131e1f119ae91',
        'rkey': 'f9cd77eb1280ab74763c1f1552dc11c7',
        'f': 'http%3A%2F%2Fwww.renren.com%2F967453528'
    }
    #实例化对象
    s = session()
    #post请求
    res = s.post(url,form)
    #获取的数据转为字典
    res_dict = json.loads(res)
    #获取url,此时cookie以通过s对象传入cookies_obj中
    home_url = res_dict['homeUrl']
    #打开url,此时将cookie_obj中的cookie
    response = s.opener.open(home_url
    #打印获取的数据
    print(response.read().decode('utf-8'))
    
    # url = 'http://www.baidu.com/'
    # html_byte = get(url)
    # print(html_byte.decode('utf-8'))  

 

转载于:https://www.cnblogs.com/tmd201304/p/9471381.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python中运用urllib.request简单抓取网页数据 的相关文章

  • X window selection --- xclip

    原文 英文 url xff1a https encyclopedia thefreedictionary com X 43 Window 43 selection 本文为笔者的翻译 xff0c 红色部分为笔者增加的批注 文章目录 Activ
  • linux安装xclip实现终端与剪贴板之间的通道

    概要 xff1a ubuntu 20 04 通过安装 xclip 来实现终端与剪贴板之间的数据通道 xff1a xclip 类似 dos 中的 clip命令 xff0c xclip 可将命令执行的结果保存到剪贴板 xff0c 还允许将文件的
  • java中GBK与UTF-8编码的转换

    文章目录 java源文件中中文字符的编码的问题UTF 8和GBK格式的文件相互转换java实现文件编码的转换 java不同编码的字节数组的转换Java判断文件编码格式对于UTF 8格式文件的判断 xff1a 利用cpdetector开源库确
  • GBK编码表

    全国信息技术标准化技术委员会 汉字内码扩展规范 GBK Chinese Internal Code Specification 1 0 版 xff08 按编码顺序排列 xff09 其编码范围 xff1a 8140 xff0d FEFE xf
  • dll文件下载网址

    https cn dll files com
  • windows中dos命令汇总及获取管理员权限

    文章目录 windows 获取管理员权限的2种方式runas 用法 windows dos 命令行语法项windows dos命令总述 windows dos命令详细介绍 win7及以前 微软官网 windows dos命令详细介绍 win
  • windows比cmd更强大的 WMIC命令使用详解

    文章目录 什么是wmic WMIC能做什么 WMIC命令使用帮助文档WMIC命令使用实例wmic的运行方式可以有两种法1 显示进程的详细信息2 停止 暂停和运行服务功能3 显示出BIOS信息4 停止进程的操作5 连接远程电脑6 BIOS 基
  • 编程意识——宏定义封装多个函数参数

    作者 釜薪君 公众号 嵌入式杂牌军 文章目录 前言一 这种意识的来源二 实现源码分析1 函数调用2 宏定义部分3 函数实现4 宏替换后的函数调用 总结 前言 今天带小伙伴们分析一段不错的代码 xff0c 学习一下关于宏封装的一种意识 xff
  • DSP28335的SCI的FIFO中断使用心得

    自学了一段时间的DSP28335的串口设置 xff0c 写下来帮助更多的新手 xff0c 遇到了很多问题也记录一些解决办法 以下全都是我个人的理解 xff0c 可能说的不对 xff0c 大家讨论 1 关于为什么必须用FIFO 一般的DSP系
  • 51单片机堆栈深入剖析

    用C语言进行MCS51系列单片机程序设计是单片机开发和应用的必然趋势 Keil公司的C51编译器支持经典8051和8051派生产品的版本 xff0c 通称为Cx51 应该说 xff0c Cx51是C语言在MCS51单片机上的扩展 xff0c
  • 基于ros_arduino_bridge的智能小车----上位机篇

    基于ros arduino bridge的智能小车 上位机篇 基于ros arduino bridge的智能小车 硬件篇 基于ros arduino bridge的智能小车 下位机篇 ros arduino bridge文件系统 xff08
  • 基于ros_arduino_bridge的智能小车----下位机篇

    基于ros arduino bridge的智能小车 下位机篇 参考文章 xff1a 基于ros arduino bridge的智能小车 上位机篇 基于ros arduino bridge的智能小车 硬件篇 下位机部分实际上可以视作完全独立的
  • 【命令】Python执行命令超时控制【原创】

    目录 参考 概要 方案 方案一 xff1a os system 方案二 xff1a os popen 方案三 xff1a subprocess check output 方案四 xff1a subprocess Popen 方案五 xff1
  • nRF52 Mesh开发 (2) SDK例程Light_switch server 添加一个element控制开发板其他LED灯

    server文件结构 xff1a 使用SEGGER编译的话直接打开 emProject文件即可 xff1b img文件中包含程序运行过程图 xff1b include文件包含该例程下的头文件 xff1b 2 具体操作 xff1a 在main
  • nRF52 Mesh开发 (3) MESH Sensor Server/Client Models详解与实现

    MESH Sensor Model 实现 MESH Spec规定的 Sensor Model 标准传感器状态传感器描述传感器参数设置传感器cadence传感器数据 传感器可发送和接收的消息Sensor Server Client Model
  • Telink Mesh 开发(1)调试log打印

    Telink Mesh SDK 调试log打印 Telink 官网论坛建议使用GPIO模拟串口打印log xff0c 推荐阅读Telink官网发布的最新SDK使用手册 xff0c 更新了不少东西 一 使用串口打印log1 使能uart lo
  • 蓝牙Mesh基础(3)蓝牙Mesh协议--总览

    蓝牙Mesh协议 总览Bearer Layer xff08 承载层 xff09 Network Layer xff08 网络层 xff09 Low Transport Layer xff08 下层传输层 xff09 Upper Transp
  • 蓝牙Mesh基础(9)设备配网

    设备配网 xff08 启动配置 xff09 设备配网过程配网PDU配网PDU如何传输呢 设备配网过程 首先 xff0c 需要配网的设备先进行未配网广播 xff0c 这个广播不同于普通的ble广播 xff0c 广播数据结构类型 xff08 A
  • 弱网络环境模拟--树莓派搭建ATC

    弱网络环境模拟 树莓派搭建ATC 1 硬件和系统2 搭建过程3 遇到的问题1 Failed to start hostapd service Unit hostapd service is masked2 django python版本问题
  • OpenCV双目相机测距程序

    本文主要分享一个双目测距的实现程序 xff0c 用的bumblebee2相机 使用的OpenCV自带的BM算法 在OpenCV3中 xff0c StereoBM算法发生了比较大的变化 xff0c StereoBM被定义为纯虚类 xff0c

随机推荐

  • stm32 printf 串口输出

    在使用STM32调试时 xff0c 经常使用串口发送信息 xff0c 为了方便调试与串口发送信息 xff0c 用printf xff08 xff09 函数实现通过串口打印信息 1 添加包含printf xff08 xff09 函数的头文件
  • 【slighttpd】基于lighttpd架构的Server项目实战(7)—http-parser

    对于http服务器 xff0c http request的解析是比较麻烦的 xff0c 由于我们的重点并不在这上面 xff0c 所以这一部分不打算自己编写 xff0c 而是使用开源的http parser库 xff0c 下面我们将使用该库来
  • C#实现以图搜图

    朋友们 xff0c 如需转载请标明出处 xff1a http blog csdn net jiangjunshow 前言 最近在逛淘宝时发现了淘宝的图片搜索功能 xff0c 可能是我太Low了这个技术点已经实现很长时间了 想想自己能不能实现
  • 床长人工智能教程 - 前言

    朋友们 如需转载请标明出处 xff1a http blog csdn net jiangjunshow 人工智能被认为是一种拯救世界 终结世界的技术 毋庸置疑 xff0c 人工智能时代就要来临了 xff0c 科幻电影中的场景将成为现实 xf
  • 如何做接口测试呢?接口测试有哪些工具【小白都会系列】

    回想入职测试已经10年时间了 xff0c 初入职场的我对于接口测试茫然不知 后来因为业务需要 xff0c 开始慢慢接触接口测试 从最开始使用工具进行接口测试到编写代码实现接口自动化 xff0c 到最后的测试平台开发 回想这一路走来感触颇深
  • C++有限状态自动机解析HTTP协议

    一 HTTP请求报文格式 HTTP请求报文主要由四部分组成 xff0c 分别为请求头 请求行 空行 请求体 xff1b 请求方法 请求方法包括GET HEAD PUT POST TRACE OPTIONS DELETE等 xff1b xff
  • 解析URL

    简介 在github有轮子http parser解析器 小的就不再造轮子了 xff0c 哈哈 xff08 造这个轮子真不是一时半会的事 xff09 目前该解析器用于nodejs的http解析 xff0c 另还有大家熟知的tcpflow 以及
  • ubuntu 串口调试助手

    ubuntu 下的串口调试助手推荐有两个 PuTTY 和 CuteCom PuTTY 除了串口通讯功能外还有 SSH 和 Telnet 等功能 CuteCom 只能用于串口通讯 但串口界面更友好 安装串口工具 ubuntu 标准安装源中包含
  • 数据的存储(1):字节序与比特序

    前言 在计算机的发展过程中 xff0c 由于不同硬件体系在数据高低有效位及存储方式理解上的差异 xff0c 出现了大端和小端这两种截然相反的对数据的位进行解释的模式 大小端模式本身没有优劣之分 xff0c 但我们在开发过程中 xff0c 需
  • [C/C++后端开发学习] 11 实现一个简单的HTTP服务器

    文章目录 实现GET方法约定GET时URI的格式状态机与websocket协议兼容实现几个辅助函数GET请求一个html页面 一张图片或一个PDF文件 实现POST方法实现一个简单的服务框架POST请求报文处理的代码块POST响应报文处理的
  • C++ Primer Plus习题及答案-第六章

    习题选自 xff1a C 43 43 Primer Plus 第六版 内容仅供参考 xff0c 如有错误 xff0c 欢迎指正 1 简单文件输入 输出 xff08 写入到文本文件中 xff09 对于文件输入 xff0c C 43 43 使用
  • 航模电池-LiPo锂聚合物电池(未完待续)

    一 外形 1 一般有几个电芯 xff0c 就是几 S xff0c 比如三个电芯就是3S 2 从电池上 xff0c 会引出两组导线 xff0c 一组细的 xff0c 一组粗的 细的一组 xff0c 由一根红线和若干根黑线组成 xff0c 最前
  • visual studio 编译C++程序,加快编译速度

    网上很多有关于选择预编译选项出现 xff0c fatal error C1083 无法打开预编译头文件 pch No such file or directory xff0c 这样的错误 xff0c 好多人会选择直接不使用预编译选项 如果工
  • C++中标准名称空间出错(cout,cin,endl是一个未知标识符)

    相信有很多小伙伴刚刚学习C 43 43 都有出现cout cin endl为未知标识符 原因是 xff1a lt iostream gt 头文件没有namespace std库 解决方法有3种 xff0c 如下 方法1 xff1a 加 us
  • C++源文件编译过程

    对于C 43 43 源文件 xff0c 从文本到可执行文件一般需要四个过程 xff1a 预处理阶段 编译阶段 汇编阶段 链接阶段 预处理阶段 xff1a 对源代码文件中文件包含关系 xff08 头文件 xff09 预编译语句 xff08 宏
  • 最短路径算法之AStar算法(一) AStar算法的证明

    本文并不试图对A Star算法进行一个入门式的讲解 xff0c 因为光是那个讲解就有可能会占据很长的篇幅 xff0c 而且网上已经有讲解的文章 xff0c 讲的肯定比我好 所以 xff0c 本文是面向已经对A Star算法有了一定了解的人
  • 最短路径算法之AStar算法(三) 《A* Pathfinding for Beginners》一文中的两个问题

    现在 xff0c 看看网上流传的很广的一篇文章 A Pathfinding for Beginners xff0c 经典的A STar算法的入门文章 xff0c 也是我前面推荐的阅读文章 个人认为 xff0c 这篇入门文章的算法不能找出最短
  • 最短路径算法之AStar算法(四) 可变H函数

    前面的文章已经讨论过 xff0c 当H函数可变时 xff0c 前面给出的AStar算法伪过程存在问题 xff0c 并且通过实际的例子证明了问题的存在 现在 xff0c 让我们具体分析一下问题究竟出现在什么地方 我们回顾一下AStar算法的证
  • 物流定位系统项目qt代码

    头文件 ifndef USER INTERFACE H define USER INTERFACE H include lt QWidget gt include lt QLabel gt include lt QMouseEvent gt
  • python中运用urllib.request简单抓取网页数据

    urllib request 1 抓取百度首页 1 from urllib import request 2 3 url 4 根据url获取数据 xff0c 下载数据到本地 5 正则orXpath处理数据 6 数据转储 7 8 url 61