python如何获取网络数据


Posted in Python onApril 11, 2021

Retrieving Data over HTTP

Python 内置了 sockets 可以实现与网络连接并通过 Python 提取数据的功能。

socket 是可以提供双向连接的,我们可以对同一个 socket 进行读写操作。比方说,A 对 socket 写入信息,并且将其发送给 socket 连接另一端 B;那么 B 读取 socket 的内容就可以得到 A 的信息。但是这样会有一个问题,比如说, A端并没有发送任何信息,而 B 端一直在尝试读取 socket 的内容,那么 A 端和 B 端只能陷入漫长的等待。所以就引入了通信协议。协议通过规定谁先发送,谁后响应等来规避上述的问题。

import socket
mysock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
mysock.connect(('fakeserver.com', 80)) # connect to server
cmd = 'GET http://fakeserver.com/fake.txt HTTP/1.0\r\n\r\n'.encode()
# send GET command followed by a blank line
mysock.send(cmd) 

while True: # receive data and print out
    data = mysock.recv(512)
    if (len(data) < 1):
        break
    print(data.decode())
mysock.close()

Retrieving Data with urllib

利用 socket 我们可以与网站服务器,邮件服务器等建立连接。但是在建立连接之前,我们需要查询文档了解通信协议,然后根据协议编写程序。所以相较于 socket 这种黑魔法,我们可以利用更为简单的 Python Package。

利用 urllib.urlopen() 打开网页后,我们就可以读取数据,像读取本地文件一样。

import urllib.request

fhand = urllib.request.urlopen('http://fakeserver.com/fake.txt')
for line in fhand:
    #convert UTF-8 to unicode string and print out
    print(line.decode().strip())

因为 urllib 使用简洁方便,所以也常用与网络爬虫。网络爬虫除了要网页读取数据以外还需要在 HTML 格式中解释出可用数据,所以除了 urllib 还有另一常用利器就是 BeautifulSoup

import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup
import ssl

# Ignore SSL certificate errors
ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

html = urllib.request.urlopen('http://fakeserver.com/fake.html', context=ctx).read()
soup = BeautifulSoup(html, 'html.parser')
tags = soup('a')
# Retrieve all of the anchor tags
for tag in tags:
    print(tag.get('href', None))

Retrieving Data from XML

在网络交换数据,我们常用的格式有两种,一是 XML; 二是 JSON。

XML 长得就像是 HTML 的近亲,可以看做是树的一种。利用 Python Package ElementTree 我们可以将 XML 文件转换为树,这样可以方便我们后续提取有效的数据。

import xml.etree.ElementTree as ET
data =  '''
            <person>
            <name>Jack</name>
            <phone>+123456789</phone>
            <email office="yes"/>
            </person> 
        '''
tree = ET.fromstring(data) # convert xml into a tree
print('Name:', tree.find('name').text)
print('Attr:', tree.find('email').get('office'))

Retrieving Data from JSON

JSON 结构相较于 XML 来说更为简单,所以他的功能就没有那么强大。但是 JSON 有一个优势就是可以直接映射到 Python 的 dictionaries 和 lists 中,非常实用。

我们可以直接利用 Python Package json 来解释 JSON。

import json
data =  '''
            {
                "name" : "Jack",
                "phone" : {
                    "type" : "intl",
                    "number" : "+123456789"
                },
                "email" : {
                    "office" : "yes"
                }
            }
        '''
info = json.loads(data)  # convert json into a dictianary
print('Name:', info['name'])
print('Attr:', info['email']['office'])

作者:Yuki
出处:https://www.cnblogs.com/yukiwu/

以上就是python如何获取网络数据的详细内容,更多关于python获取网络数据的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python中类的继承代码实例
Oct 28 Python
Python中最常用的操作列表的几种方法归纳
Apr 24 Python
python获取当前日期和时间的方法
Apr 30 Python
python通过加号运算符操作列表的方法
Jul 28 Python
利用aardio给python编写图形界面
Aug 21 Python
详解重置Django migration的常见方式
Feb 15 Python
python挖矿算力测试程序详解
Jul 03 Python
django一对多模型以及如何在前端实现详解
Jul 24 Python
python redis连接 有序集合去重的代码
Aug 04 Python
基于python的itchat库实现微信聊天机器人(推荐)
Oct 29 Python
Python获取、格式化当前时间日期的方法
Feb 10 Python
使用python实现多维数据降维操作
Feb 24 Python
Pytorch 使用tensor特定条件判断索引
selenium.webdriver中add_argument方法常用参数表
Apr 08 #Python
python3使用diagrams绘制架构图的步骤
python实现求纯色彩图像的边框
python爬取企查查企业信息之selenium自动模拟登录企查查
Python3 使用pip安装git并获取Yahoo金融数据的操作
Apr 08 #Python
Django 如何实现文件上传下载
Apr 08 #Python
You might like
漂亮但不安全的CTB
2006/10/09 PHP
解读PHP中上传文件的处理问题
2016/05/29 PHP
PHP编程之设置apache虚拟目录
2016/07/08 PHP
Thinkphp 框架基础之入口文件功能、定义与用法分析
2020/04/27 PHP
PHP后门隐藏的一些技巧总结
2020/11/04 PHP
$.ajax json数据传递方法
2008/11/19 Javascript
点击文章内容处弹出页面代码
2009/10/01 Javascript
JavaScript 联动的无限级封装类,数据采用非Ajax方式,随意添加联动
2010/06/29 Javascript
游览器中javascript的执行过程(图文)
2012/05/20 Javascript
JavaScript高级程序设计(第3版)学习笔记7 js函数(上)
2012/10/11 Javascript
js模拟点击事件实现代码
2012/11/06 Javascript
jQuery实现拖动调整表格单元格大小的代码实例
2015/01/13 Javascript
基于BootStrap栅格栏系统完成网站底部版权信息区
2016/12/23 Javascript
D3.js中强制异步文件读取同步的几种方法
2017/02/06 Javascript
nodejs获取微信小程序带参数二维码实现代码
2017/04/12 NodeJs
微信小程序框架wepy之动态控制类名
2018/09/14 Javascript
微信小程序在地图选择地址并返回经纬度简单示例
2018/12/03 Javascript
jQuery实现电梯导航模块
2020/12/22 jQuery
Python实现的生成自我描述脚本分享(很有意思的程序)
2014/07/18 Python
python实现批量监控网站
2016/09/09 Python
python使用mysql数据库示例代码
2017/05/21 Python
pandas 实现将重复表格去重,并重新转换为表格的方法
2018/04/18 Python
matplotlib subplots 设置总图的标题方法
2018/05/25 Python
Python应用领域和就业形势分析总结
2019/05/14 Python
pandas.DataFrame的pivot()和unstack()实现行转列
2019/07/06 Python
Python异常处理例题整理
2019/07/07 Python
python调用API接口实现登陆短信验证
2020/05/10 Python
pytorch读取图像数据转成opencv格式实例
2020/06/02 Python
基于Django集成CAS实现流程详解
2020/11/28 Python
浅析HTML5中的 History 模式
2017/06/22 HTML / CSS
科颜氏法国官网:Kiehl’s法国
2019/08/20 全球购物
大学生最常用的自我评价
2013/12/07 职场文书
2014年禁毒工作总结
2014/11/24 职场文书
步步惊心观后感
2015/06/12 职场文书
PostgreSQL将数据加载到buffer cache中操作方法
2021/04/16 PostgreSQL
Go Grpc Gateway兼容HTTP协议文档自动生成网关
2022/06/16 Golang