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模拟新浪微博登陆功能(新浪微博爬虫)
Dec 24 Python
python 捕获 shell/bash 脚本的输出结果实例
Jan 04 Python
Python实现的求解最大公约数算法示例
May 03 Python
强悍的Python读取大文件的解决方案
Feb 16 Python
计算机二级python学习教程(3) python语言基本数据类型
May 16 Python
Python数据持久化存储实现方法分析
Dec 21 Python
pytorch 实现查看网络中的参数
Jan 06 Python
python实现图片素描效果
Sep 26 Python
Python类的继承super相关原理解析
Oct 22 Python
python 利用matplotlib在3D空间绘制二次抛物面的案例
Feb 06 Python
使用Python webdriver图书馆抢座自动预约的正确方法
Mar 04 Python
python生成随机数、随机字符、随机字符串
Apr 06 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
PHP读取txt文本文件并分页显示的方法
2015/03/11 PHP
ThinkPHP文件缓存类代码分享
2015/04/22 PHP
php实现paypal 授权登录
2015/05/28 PHP
文件上传之SWFUpload插件(代码)
2015/07/30 PHP
使用隐藏的new来创建对象
2011/03/29 Javascript
javascript jscroll模拟html元素滚动条
2012/12/18 Javascript
ajax java 实现自动完成功能
2012/12/19 Javascript
jquery js 获取时间差、时间格式具体代码
2013/06/05 Javascript
ie8本地图片上传预览示例代码
2014/01/12 Javascript
Jquery创建层显示标题和内容且随鼠标移动而移动
2014/01/26 Javascript
jquery实现标签支持图文排列带上下箭头按钮的选项卡
2015/03/14 Javascript
微信小程序 video详解及简单实例
2017/01/16 Javascript
基于JavaScript实现滑动门效果
2017/03/16 Javascript
vue2导航根据路由传值,而改变导航内容的实例
2017/11/10 Javascript
微信小程序tabbar底部导航
2018/11/05 Javascript
JavaScript实现五子棋游戏的方法详解
2019/07/08 Javascript
uni-app使用微信小程序云函数的步骤示例
2020/05/22 Javascript
[44:40]Serenity vs Pain 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
Python设计模式之单例模式实例
2014/04/26 Python
C#返回当前系统所有可用驱动器符号的方法
2015/04/18 Python
Python如何判断数独是否合法
2016/09/08 Python
PyCharm的设置方法和第一个Python程序的建立
2019/01/16 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
2020/03/06 Python
python3检查字典传入函数键是否齐全的实例
2020/06/05 Python
使用K.function()调试keras操作
2020/06/17 Python
英国美发和美容产品商城:HQhair
2019/02/08 全球购物
管理站站长岗位职责
2013/11/27 职场文书
户外亲子活动策划方案
2014/02/07 职场文书
导师推荐信范文
2014/05/09 职场文书
环保志愿者活动方案
2014/08/14 职场文书
2014年市场部工作总结
2014/11/25 职场文书
2014年学校禁毒工作总结
2014/12/23 职场文书
合同审查法律意见书
2015/06/04 职场文书
聘任书范文大全
2015/09/21 职场文书
股权投资协议书
2016/03/23 职场文书
浅谈Python数学建模之固定费用问题
2021/06/23 Python