精华内容
下载资源
问答
  • 作为一个Python+爬虫的小白,今天要搞点爬虫的活儿,以前没做过,从零开始。 win10的系统,python我的电脑上以前不记得什么时候安装过,安装的是3.6的版本,能。代码工具,先使用VS code。 先做个简单的爬取网页的...

    作为一个Python+爬虫的小白,今天要搞点爬虫的活儿,以前没做过,从零开始。 win10的系统,python我的电脑上以前不记得什么时候安装过,安装的是3.6的版本,能用。代码工具,先使用VS code。 先做个简单的爬取网页的demo。 Python3 提供了 urllib 这个标准库,无需安装,即可引用使用:

    from urllib import request

    复制代码

    然后,我们就可以使用urllib发送GET请求了。代码如下:

    from urllib import request

    req_news = request.Request('https://news.163.com/20/0522/13/FD82KGA1000189FH.html')

    req_news.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36')

    html_news = request.urlopen(req_news).read()

    print('------------')

    print(html_news.decode('gbk'))

    复制代码

    User-Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。 这里在请求头中添加这个是为了模拟浏览器正常请求,很多服务器都会做检测,发现不是正常浏览器的请求会直接拒绝(很多网站不一定有这种检测,但这是最基本的防爬虫策略),当然真实的浏览器发送的请求头里面不仅仅只有一个 UA。浏览器上截图。

    906163f0af1c4c6492d48bdcef3525ff.jpg

    注意:request.urlopen(req_news).read()里读出来的内容有时候是二进制(bytes)数据,需要进行转换,中文需要用decode转成 GBK 格式,写入时可写入UTF-8格式。

    有时候读出来的直接是字符串,可以用encoding转成utf-8

    为什么是GBK格式呢?为什么不是UTF-8或或者别的格式呢

    我们F12查看一下网页代码,在html/head/meta标签先有charset属性,标识了网页的编码。我们可以把它取出来作为转码依据。

    注意:默认格式的编码是gbk,如果取出来的charset为空,设为gbk格式

    41a66149af61475b90c6b4bfc6ba68bf.jpg 完善代码如下:

    from urllib import request

    req_news = request.Request('https://news.163.com/20/0522/13/FD82KGA1000189FH.html')

    req_news.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36')

    html_news = request.urlopen(req_news).read()

    if len(char_set) == 0:

    char_set = ['gbk']

    html_news = html_news.decode(char_set[0])

    print('------------')

    print(html_news)

    复制代码

    然后,将读出来的页面信息写到一个文件里。python读写文件需要先引入os。

    import os

    复制代码

    base_dir = os.getcwd()

    #获取当前文件夹的绝对路径

    file_name = os.path.join(base_dir, 'data', 'news.html')

    #打开fie_name路径下的news.html文件,采用写入模式

    #若文件不存在,创建,若存在,清空并写入

    my_open = open(file_name, 'w', encoding="utf-8")

    #在文件中写入内容

    my_open.write(html_news.decode('gbk'))

    my_open.close()

    复制代码

    完整的读写代码如下:

    from urllib import request

    # from lxml import etree

    # import re

    import os

    req_news = request.Request('https://news.163.com/20/0522/13/FD82KGA1000189FH.html')

    req_news.add_header('User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36')

    html_news = request.urlopen(req_news).read().decode('gbk')

    print('------------')

    print(html_news)

    base_dir = os.getcwd()

    #获取当前文件夹的绝对路径

    file_name = os.path.join(base_dir, 'data', 'news.html')

    # print(file_name)

    #打开fie_name路径下的news.html文件,采用写入模式

    #若文件不存在,创建,若存在,清空并写入

    my_open = open(file_name, 'w', encoding="utf-8")

    #在文件中写入内容

    my_open.write(html_news)

    my_open.close()

    复制代码

    这只是爬虫的第一步,接下来还需要分析网页数据,提取自己想要的内容。

    展开全文
  • # author:Iron Qiproduct_list = [('Iphone',5800),('Mac Pro',9800),('Play Game',1000),('Watch',4300),('Basketball',260),('cloth',1314)]shopping_list=[] #商品购物车是空表salary = input("Input your salary...

    # author:Iron Qi

    product_list = [('Iphone',5800),

    ('Mac Pro',9800),

    ('Play Game',1000),

    ('Watch',4300),

    ('Basketball',260),

    ('cloth',1314)

    ]

    shopping_list=[] #商品购物车是空表

    salary = input("Input your salary:")

    if salary.isdigit():

    salary = int(salary)

    while True:

    for index,item in enumerate(product_list): # 取列表的下标和实际属性

    print(index,item)

    user_choice = input("Please select the item you want to buy:") # 选择的是商品编号

    if user_choice.isdigit():

    user_choice = int(user_choice)

    if user_choice < len(product_list)and user_choice >=0:

    p_price=product_list[user_choice]

    if p_price[1] <= salary: #can buy

    shopping_list.append(p_price)

    salary -=p_price[1]

    print("Added %s into shopping cart,your balance is \033[31;1m%s\033[0m" %(p_price,salary))

    else:

    print("\033[32;1myour balance only is[%s],No longer available\033[0m"% salary)

    else:

    print("product code [%s] is not exist!"% user_choice)

    elif user_choice =='q':

    print("---------shopping list---------")

    for p in shopping_list:

    print(p)

    print("your current balance:",salary)

    exit()

    else:

    print("invalid option")

    else:

    print("\033[33;1mYour input is not valid\033[0m") #\033[33;1m----\033[0m 是用来高亮。

    展开全文
  • 如何用python写出python的解释器,我感觉这是一个很好的问题,于是就去看看,打算用python写一个试试,后来我发现一个事情,python里面的subprocess算是一个很有趣的东西,他可以解释python自己的代码,之后就有个...

    前几天,一个朋友提出了一个建议,如何用python写出python的解释器,我感觉这是一个很好的问题,于是就去看看,打算用python写一个试试,后来我发现一个事情,python里面的subprocess算是一个很有趣的东西,他可以解释python自己的代码,之后就有个想法了,尝试用subprocess去写一个在线运行python的网站。

    那今天我们就来分享一下,如何使用python去写一个在线python吧!

    首先,这个东西是结合python的flask框架来完成的。先介绍一下flask框架:

    Flask也被称为 “microframework” ,因为它使用简单的核心,用 extension 增加其他功能。Flask没有默认使用的数据库、窗体验证工具。然而,Flask保留了扩增的弹性,可以用Flask-extension加入这些功能:ORM、窗体验证工具、文件上传、各种开放式身份验证技术。

    使用终端,运行命令提示符CMD,执行:

    pip install Flask

    在做我们的工作之前先来了解一下flask框架是怎样的一个运行机制吧:

    首先创建一个flaskrun.py文件(先写个demo,后面在这个基础上改改,就可以作为网站后端的接口了)

    每个函数的上面都有修饰器,这个就代表他的路由,比如说@app.route('/'),它就指定了,下面这个函数所在的地址是127.0.0.1:5000/(默认端口是5000,可以手动在run方法中修改)

    这个文件运行首先我们在没设置app文件的情况下,需要先设置一下,并且开成调试模式,再去运行:

    set FLASK_APP=flaskrun.py

    set FLASK_DEBUG=1

    flask run

    run了之后,服务会起了,就会跳出这样的界面。

    那我们现在就可以去访问路由了,现在我们想访问index方法,我们就输入路由:

    如果我们想访问hello方法,这个时候我们就需要加上/hello的路由了:

    这样我们就进入了/hello的方法了,每个方法对应一个路由,包含最后一个post也是一样:

    下面我们还要介绍的是报错机制:

    在路由或者访问数据不对的情况下,我们一般得不到正确的结果,这个时候我们就需要来看看flask对于错误是如何进行解释的了。

    flask对于错误也有个修饰器,叫@app.errorhandler() ,括号里面跟错误代码,例如,无法找到页面就可以这么写:@app.errorhandler(404)

    当然还有一些其他的错误,例如400,500,405等错误,我们都可以捕捉:

    ok,flask介绍完毕,我们下面进入正轨了,用subprocess来写python了。创建一个文件叫:pyol.py

    首先导入要用的包:

    import os,sys,subprocess,tempfile,time (敲代码的时候建议大家还是分开敲,连起来写虽然也支持,但是事实上是不规范的,建议分开写)

    在这里我们还需要用到临时文件夹,这个文件夹我们在运行python的时候会用到。

    TempFile = tempfile.mkdtemp(suffix='_test', prefix='python_')

    FileNum = int(time.time()*1000)

    下面一点比较关键的是,我们需要用到sys模块里的executable方法来获取python编译器的位置(就是它,才能解读python代码),

    EXEC=sys.executable

    下面我们需要定义编码方式:

    def decode(s):

    try:

    return s.decode('utf-8')

    except UnicodeDecodeError:

    return s.decode('gbk')

    在默认情况下都是以utf-8的情况下进行编码。

    下面我们需要将用户写进来的python代码写入文件:

    def write_file(pyname, code):

    fpath = os.path.join(TempFile, '%s.py' % pyname)

    with open(fpath, 'w', encoding='utf-8') as f:

    f.write(code)

    print('file path: %s' % fpath)

    return fpath

    下面我们需要在在一个主函数中定义执行方法,我们此时就需要用到subprocess 的check_output方法返回子进程的输出结果(check_output 是 父进程等待子进程完成,返回子进程向标准输出的输出结果 )

    outdata = decode(subprocess.check_output([EXEC, fpath], stderr=subprocess.STDOUT, timeout=5))

    将返回结果输出:

    r['output'] = outdata

    最后退出程序并删除文件:

    try:

    os.remove(fpath)

    except Exception as e:

    exit(1)

    但是实际上这个临时文件本身也会自动删除,这步其实也算是多余的。这样我们的python就写好了。下面只需要把它加入路由,把用户输入的数据以post的方式提交即可。

    我们在flaskrun.py文件里导入以下模块:

    from flask import Flask

    from flask import request

    from flask import Response

    import json

    import pyol

    我们需要定义一个返回的头部:

    def Response_headers(content):

    resp = Response(content)

    resp.headers['Access-Control-Allow-Origin'] = '*'

    return resp

    之后我们来写post请求的接口:

    @app.route('/run',methods=['POST'])

    def run():

    if request.method == 'POST' and request.form['code']:

    code = request.form['code']

    print(code)

    jsondata = pyol.main(code)

    return Response_headers(str(jsondata))

    我们指定他的路由为/run,采用post的方式传递数据,调用刚刚写的主函数的执行代码,来执行用户传入的code,最后将执行结果返回给用户。

    最后我们运行代码:

    if __name__ == '__main__':

    app.run(host='0.0.0.0',port=1234,debug=True)

    最后完整加上优化后代码如下:

    pyol.py

    flaskrun.py

    我们现在需要借助postman来看一下run的结果,首先我们先run一下代码

    (flask run):

    之后我们打开postman

    瞬间就完成了。

    之后我们只要写个前端,把这个接口给前端调就大功告成了!

    欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。

    展开全文
  • 脚本在最后,可以直接试用,相关的库可能需要自己安装第步,你需要获得网页上下载文件地址的列表浏览器查看页面源文件得到可以看到,这格式是很清晰的,xpath获得列表即可,这部分你可以去网上找相关教程,...

    脚本在最后,可以直接试用,相关的库可能需要自己安装

    第一步,你需要获得网页上下载文件地址的列表

    用浏览器查看页面源文件得到 />

    可以看到,这个格式是很清晰的,用xpath获得列表即可,

    这部分你可以去网上找相关教程,这部分的代码如下:

    Host = 'http://cnn.csail.mit.edu/motif_occupancy/'

    response = requests.get(Host).content

    selector = html.fromstring(response)

    book_list = selector.xpath('//table//a//@href')

    # 去除部分表头元素

    book_list = filter(lambda x: x.startswith('wg'), book_list)

    第二步,进入其中一个下载列表

    查看页面源文件得到 />

    我只看了若干的几个,假设任意一个都是这种格式,那么相关的连接无需搜索即可手动确定

    第三步,在本地创建文件夹,并保存文件

    # 在需要的地方建立文件夹

    os.system('mkdir -p %s' % book)

    for category in ['train.data', 'test.data']:

    url = Host + book + category

    headers["Referer"] = Host + book

    a = requests.get(url, headers = headers)

    xxx

    with open(os.path.join(book, category), 'wb') as f:

    f.write(requests.get(url).content)

    现在的问题是,不知道什么原因,我这边的网络下载文件速率巨慢,大概1分钟3M的样子,可能是网络的原因吧,如果题主下载速率还可以,那就没问题,如果也不行,你只能自己找找原因了。我这边浏览器下载文件也很慢,看来网站并没有抑制爬虫的措施。

    整体代码为

    #!/usr/local/bin/python3

    #-*-coding:utf-8-*-

    import requests

    from lxml import html

    import os

    headers = {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_1) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/12.0.1 Safari/605.1.15",

    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",

    "Referer": "",

    "DNT": "1",

    }

    Host = 'http://cnn.csail.mit.edu/motif_occupancy/'

    response = requests.get(Host).content

    selector = html.fromstring(response)

    book_list = selector.xpath('//table//a//@href')

    # 去除部分表头元素

    book_list = filter(lambda x: x.startswith('wg'), book_list)

    for book in book_list:

    # 在需要的地方建立文件夹

    os.system('mkdir -p %s' % book)

    for category in ['train.data', 'test.data']:

    url = Host + book + category

    headers["Referer"] = Host + book

    with open(os.path.join(book, category), 'wb') as f:

    f.write(requests.get(url, headers = headers).content)

    展开全文
  • 如何用python写出python的解释器,我感觉这是一个很好的问题,于是就去看看,打算用python写一个试试,后来我发现一个事情,python里面的subprocess算是一个很有趣的东西,他可以解释python自己的代码,之后就有个...
  • 、准备 python基础相关准备:pygame的基础知识,参考目光博客的“用Python和Pygame游戏-从入门到精通”安python 3.8.0 在python官网下载,不多说。安装pygame,命令:pip install pygame如安装较慢,可以参考...
  • 周末去了好朋友家玩,继上次我帮他修好...现在他作为一个论坛版主,每天要冒充水军回复固定的贴数。。。我思考了一下,自动顶帖应该是自动发送HTTP协议的POST包吧。如果是HTTPS那就比较麻烦了,他给我看了下网站 ht...
  • 如何用python写出python的解释器,我感觉这是一个很好的问题,于是就去看看,打算用python写一个试试,后来我发现一个事情,python里面的subprocess算是一个很有趣的东西,他可以解释python自己的代码,之后就有个...
  • 只知道在from中提交表单数据发送至服务器,但具体与服务器和数据库...也可以请大神们帮忙写一个前后端完整的思路也行,而后最好有注释,要不然只会抄搞不明白细节白白浪费了大神们的心意)</p>
  • 前几天,一个朋友提出了一个建议,如何用python写出python的解释器,我感觉这是一个很好的问题,于是就去看看,打算用python写一个试试,后来我发现一个事情,py...
  • 点击上面“蓝字”关注我我们在写一个网站或者一个网页界面的时候,需要学习很多东西,对小白来说很困难!比如我要做一个简单的网页交互:·要懂后端,比如Python里面的Django或者Flask,或者是Java里面的SpringBoot·...
  • 如何用C++写一个网站

    千次阅读 2019-11-19 20:43:48
    本文中我们将尝试C++写一个简单的网站,探索一些细节性的问题,并报告C++写网站的体验如何。 2.准备工作 无论是之前比较传统的PHP,java,还是新兴的python或Go,在运行网站项目的时候都必须依托于一个webserver...
  • 舆情分析并不难,让我们用Python来实现它吧。痛点你是一家连锁火锅店的区域经理,很注重顾客对餐厅的评价。从前,你苦恼的是顾客不爱评价。最近因为餐厅火了,分店越来越多,评论的顾客也多了起来,于是你新的...
  • 如何发布一个Python程序:1、安装一个pyInstaller在pycharm里点 file—–>setting—–>Project workspace——>Interpreter——>点pip右边的+号,进入下面这个界面:搜索pyInstaller, 点击左下方Install package安装...
  • 如何用Python爬数据?()网页抓取你期待已久的Python网络数据爬虫教程来了。本文为你演示如何从网页里找到感兴趣的链接和说明文字,抓取并存储到Excel。需求我在公众号后台,经常可以收到读者的留言。很多留言,...
  • Python——怎么发布你的Python模块我们在学习Python的时候,除了pip安装一些模块之外,有时候会从网站下载安装包下来安装,我也想要把我自己编写的模块做成这样的安装包,该怎么办,如何发布呢?大概需要以下四...
  • 本文中我们将尝试C++写一个简单的网站,探索一些细节性的问题,并报告C++写网站的体验如何。2.准备工作无论是之前比较传统的PHP,java,还是新兴的python或Go,在运行网站项目的时候都必须依托于一个webserver。...
  • 如何用Python爬数据?()网页抓取你期待已久的Python网络数据爬虫教程来了。本文为你演示如何从网页里找到感兴趣的链接和说明文字,抓取并存储到Excel。需求我在公众号后台,经常可以收到读者的留言。很多留言,...
  • 学会如何使用API通过url(Uniform Resource Locator 统一资源定位符)连接网络,获取网站的API获取url存储的API,request执行获取的urlrequests.get(url) 定义一个变量,将API响应存储在里面,调用json将r存储的api...
  • Django是一个Web框架——一套用于帮助开发交互式网站的工具。Django能够响应网页请求,还能让你更轻松地读写数据库、管理用户等。建立Django项目建立Django项目首先需要确保我们按照好了Django,我们在Pycharm中打开...
  • 推荐几个适合新手练手的Python项目一:满分推荐,非常值得练习GitHub-Yixiaohan/show-me-the-code:Python练习册,一个小程序实例二:一步一做webapp,解释以及源码实战-峰的官方网站实例三:web机器人,源码下载...
  • 如何用 Python 爬取需要登录的网站

    万次阅读 2017-12-30 00:00:00
    (点击上方蓝字,快速关注我们)英文:Tzahi Vidas ...它没有我想象中那么简单,因此我决定为它写一个辅助教程。在本教程中,我们将从我们的bitbucket账户中爬取一个项目列表。教程中的代码可以从我的 Github 中找到。
  • 涉及的知识点:1.ORM框架的基本概念2.Django数据库管理系统的基本使用3.Django后台管理系统的基本使用4.Django模板系统的基本使用5.Django视图系统的基本使用6.Django路由的基本使用7.Django如何运行测试8.Linux中...
  • Python函数的定义定义函数,也就是创建一个函数,可以理解为创建一个具有某些用途的工具。定义函数需要 def 关键字实现,具体的语法格式如下:def函数名(形参列表)://由零条到多条可执行语句组成的代码块[return...
  • 我们在写一个网站或者一个网页界面的时候,需要学习很多东西,对小白来说很困难!比如我要做一个简单的网页交互: 要懂后端,比如Python里面的Django或者Flask,或者是Java里面的SpringBoot 很多人学习...
  • 爬取一个网站有很多种方法,而选用哪种方法更加合适,则取决于目标网站的结构。本章中,首先会探讨如何安全地下载网页,然后会介绍如下3种爬取网站的常见方法: 爬取网站地图 遍历每个网页的数据库ID 跟踪网页...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 390
精华内容 156
关键字:

如何用python写一个网站

python 订阅