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中实现两个字典(dict)合并的方法
Sep 23 Python
python中as用法实例分析
Apr 30 Python
python3.5 tkinter实现页面跳转
Jan 30 Python
pandas.dataframe中根据条件获取元素所在的位置方法(索引)
Jun 07 Python
对python实时得到鼠标位置的示例讲解
Oct 14 Python
解决Python获取字典dict中不存在的值时出错问题
Oct 17 Python
对Python 简单串口收发GUI界面的实例详解
Jun 12 Python
解决Django中调用keras的模型出现的问题
Aug 07 Python
Python OpenCV图像指定区域裁剪的实现
Oct 30 Python
Django form表单与请求的生命周期步骤详解
Jun 07 Python
详解python UDP 编程
Aug 24 Python
Python通过fnmatch模块实现文件名匹配
Sep 30 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
Twig模板引擎用法入门教程
2016/01/20 PHP
Javascript String对象扩展HTML编码和解码的方法
2009/06/02 Javascript
让网页跳转到指定位置的jquery代码非书签
2013/09/06 Javascript
用javascript关闭本窗口技巧小结
2014/09/05 Javascript
JS实用的动画弹出层效果实例
2015/05/05 Javascript
javascript中JSON对象与JSON字符串相互转换实例
2015/07/11 Javascript
Jquery效果大全之制作电脑健康体检得分特效附源码下载
2015/11/02 Javascript
jQuery的Cookie封装,与PHP交互的简单实现
2016/10/05 Javascript
angular源码学习第一篇 setupModuleLoader方法
2016/10/20 Javascript
完美解决spring websocket自动断开连接再创建引发的问题
2017/03/02 Javascript
ES6学习之变量的两种命名方法示例
2017/07/18 Javascript
Node.js自定义实现文件路由功能
2017/09/22 Javascript
使用sessionStorage解决vuex在页面刷新后数据被清除的问题
2018/04/13 Javascript
NodeJS搭建HTTP服务器的实现步骤
2018/10/12 NodeJs
解决vue props传Array/Object类型值,子组件报错的情况
2020/11/07 Javascript
Python中文件遍历的两种方法
2014/06/16 Python
Python中表达式x += y和x = x+y 的区别详解
2017/06/20 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
Django rest framework实现分页的示例
2018/05/24 Python
python实现人民币大写转换
2018/06/20 Python
Python中最大递归深度值的探讨
2019/03/05 Python
python实现与redis交互操作详解
2020/04/21 Python
python代码中怎么换行
2020/06/17 Python
通过案例解析python鸭子类型相关原理
2020/10/10 Python
馥蕾诗美国官网:Fresh美国
2019/10/09 全球购物
外贸业务员的岗位职责
2013/11/23 职场文书
教师档案管理制度
2014/01/23 职场文书
业绩考核岗位职责
2014/02/01 职场文书
幼儿园大班毕业感言
2014/02/06 职场文书
采购求职信
2014/03/17 职场文书
幼儿园课题方案
2014/06/09 职场文书
工作所在部门证明
2014/09/21 职场文书
孟佩杰观后感
2015/06/17 职场文书
婚礼男方父母答谢词
2015/09/29 职场文书
告诉你一个秘密:富人致富的五大优点
2019/07/11 职场文书
如何将JavaScript将数组转为树形结构
2021/06/02 Javascript