• python-爬虫-urllib


    网络爬虫(Web Crawler),又叫网络蜘蛛、网络机器人,是一种自动化数据采集程序

    数据采集 → 数据处理 → 数据存储

    常见的工作流程如下:

    1.定义采集的目标(网站、APP、公众号、小程序),发送网络请求获取数据
    2.当向目标发起请求,遇到对方服务器无响应或提示其他错误时,进行发起指定次数的重新请求
    3.对获取到的数据进行重新处理,提取出需要的信息
    4.将提取到的数据进行保存,可保存在文件、数据库中
    5.继续循环进行下一轮任务的执行,直到所有爬取任务执行完毕

    urllib网络请求库

    urllib是python内置的一个用于网络请求的库,可以实现模拟浏览器发送HTTP请求并获取请求返回结果

    请求一个简单的网页并设置请求超时

    urllib.request模块
    urlopen()方法可以对网页发起请求并获取返回结果

    在这里插入图片描述

    import urllib.request
    
    url = 'http://www.baidu.com/'
    r = urllib.request.urlopen(url,timeout=3)		# 请求超过3秒未响应内容,舍弃或重新尝试访问
    html = r.read()			# read()方法可以拿到真正的网页源代码
    html.decode('utf-8')	# 有乱码时,可以通过decode()方法对字符串进行解码
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    timeout=3:请求超过3秒未响应内容,舍弃或重新尝试访问
    read()方法可以拿到真正的网页源代码
    有乱码时,可以通过decode()方法对字符串进行解码
    在这里插入图片描述

    使用data参数提交数据

    data必须是字节流编码格式的内容,即bytes类型,通过bytes()函数可以进行转换

    传递了data参数,请求方式POST

    http://httpbin.org/

    urllib.parse.urlencode()将提交的data字典数据转化为str
    bytes()转换为字节流·

    import urllib.parse
    import urllib.request
    
    data = bytes(urllib.parse.urlencode({'word':'22222'}),encoding='utf8')
    response = urllib.request.urlopen('http://httpbin.org/post',data=data)
    response.read()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    b’{\n “args”: {}, \n “data”: “”, \n “files”: {}, \n “form”: {\n “word”: “22222”\n }, \n “headers”: {\n “Accept-Encoding”: “identity”, \n “Content-Length”: “10”, \n “Content-Type”: “application/x-www-form-urlencoded”, \n “Host”: “httpbin.org”, \n “User-Agent”: “Python-urllib/3.7”, \n “X-Amzn-Trace-Id”: “Root=1-64fff907-00a9118873eff0da107e28f2”\n }, \n “json”: null, \n “origin”: “117.136.56.234”, \n “url”: “http://httpbin.org/post”\n}\n’

    urllib.request.Request()

    在这里插入图片描述

    url = 'https://www.baidu.com/'
    headers = {
        'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36 Edg/116.0.1938.76'
    }
    request = urllib.request.Request(url,headers=headers)
    response = urllib.request.urlopen(request)
    response.read().decode('utf-8')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    百度网站对请求的headers信息进行了验证,直接使用Request()请求,默认的User-Agent是Python-urllib/版本号,百度会识别出来是程序在访问,会对其进行拦截

  • 相关阅读:
    AWD思路
    【招招制敌】修改element-ui中el-image 预览图大小的默认尺寸,让展示效果更加有呼吸感
    如何删除掉MySQL的多余的实例
    SSL证书如何做到保障网站安全?
    springboot操作es
    计算文本相似度的几种方法以及实现原理
    节省时间,创造价值:人工智能在工作中的实际应用
    7-2 芬兰木棋 结构体排序
    Python每日一练——第5天:闰年问题升级版
    springboot系列(二十三):如何实现Excel文件导入?这你得会 | 超级详细,建议收藏
  • 原文地址:https://blog.csdn.net/weixin_64729620/article/details/132824595