爬虫练习

说是练习,实际是尝试了一些还没有具体了解的方式吧hhhhh'

基于urllib实现

import urllib.request
import re url="https://www.zhihu.com/question/21100397" # 我们要爬取图片的地址 page = urllib.request.urlopen(url) # 第一行 打开网址
html = page.read().decode("utf-8") # 第二行 获取html源码 imglist = re.findall('img src="(http.*?)"',html) # 第三行 在html中匹配出符合条件的字符串 x=0
for imgurl in imglist: # 遍历图片地址列表
urllib.request.urlretrieve(imgurl,'pic%s.jpg' %x) # 第四行 获取图片并保存
x=x+1

定义函数的三种方式

# 无参函数
# 不需要接收外部传入的参数
def foo():
print('from foo..')
foo()
# # 有参函数
# 需要接收外部传入的参数
def login(user, pwd):
print(user, pwd) # 传参多一或少一不可
#login('tank', '123')
# login('tank', '123', 111) # 多,报错
# login('tank') # 少,报错 # # x = 10
# # y = 20
# # if x > y:
# # print(x)
# # else:
# # print(y)
# 比较两数大小
def max2(x, y):
if x > y:
print(x)
else:
print(y) max2(10, 30) # 空函数
# 遇到一些比较难实现的功能,会导致暂时无法继续编写代码。
# 所以一般在生产开发中,都会将所有功能实现定义成空函数。
def func():
pass # pass代表什么都不做

函数的返回值
在调用函数时,需要接收函数体内部产生的结果,则return返回值。

def max2(x, y):

if x > y:

return x

else:

return y

res = max2(10, 5)

print(res)

函数对象
指的是函数名指向的内存地址。

 def func():
pass
# print(func) # <function func at 0x101dd2e18>
#
# func()
def func2():
pass
# 把函数对象,传入字典中
dict1 = {
'': func,
'': func2
}
choice = input('请输入功能编号:').strip()
# if choice == '1':
# func()
# elif choice == '2':
# func2()
#
# 若用户选择函数对象对应的key值,则调用该函数
if choice in dict1:
dict1[choice]() # dict1['1']

函数嵌套:
  嵌套定义:
    在函数内,定义函数。

嵌套调用:

def func1():
print('func1...')
def func2():
print('func2...')
def func3():
print('func3...')
# ....
return func3
return func2
# 通过函数内部的函数值,调用函数
func2 = func1()
func3 = func2()
func3()
# 函数嵌套调用
def func1():
print('func1...')
def func2():
print('func2...')
def func3():
print('func3...')
# ....
func3()
func2()
func1()

名称空间
python解释器自带的: 内置名称空间
自定义的py文件内,顶着最左边定义的: 全局名称空间
函数内部定义的: 局部名称空间

name = 'tank'

def func1():
# name = 'abc'
print() def func2(): print('func2...') # print(name, '全局打印') func1()

引用自己编辑的包以及文件

import B

# from
# 导入B模块中的a文件
# 会自动执行a文件中的代码
from B import a # __name__: B.a
# a

常用模块(内置模块)


time 时间模块

import time  # 导入time模块
# 获取时间戳
print(time.time())
# 等待2秒
time.sleep(2)
print(time.time())

os 模块

# 与操作系统中的文件进行交互
# 判断tank.txt文件是否存在
print(os.path.exists('test.txt')) # True
print(os.path.exists('test1.txt')) # False
print(os.path.exists(r'C::\Users\liubin\Desktop\test.txt')) # True
# 获取当前文件的根目录
print(os.path.dirname(__file__)) # D:/python_files/day03

sys模块

import sys
# 获取python在环境变量中的文件路径
print(sys.path)
# 把项目的根目录添加到环境变量中
sys.path.append(os.path.dirname(__file__))
print(sys.path)

json模块

import json
# user_info = {
# 'name': 'tank',
# 'pwd': '123'
# } # dumps: 序列化
# 1、把字典转行成json数据
# 2、再把json数据转换成字符串
res = json.dumps(user_info)
print(res)
print(type(res))
with open('user.json', 'wt', encoding='utf-8') as f:
f.write(res) # loads: 反序列化
# json.loads()
# 1、把json文件的数据读到内存中
with open('user.json', 'r', encoding='utf-8') as f:
# # 读取得到的是字符串
res = f.read()
# # print(type(res))
# # loads把json格式的字符串转换成dict类型
user_dict = json.loads(res)
print(user_dict) # {'name': 'tank', 'pwd': '123'}
print(type(user_dict)) # <class 'dict'> # dump
user_info = {
'name': 'tank',
'pwd': ''
}
with open('user_info.json', 'w', encoding='utf-8') as f:
# str1 = json.dumps(user_info)
# f.write(str1)
# dump: 自动触发f.write方法
json.dump(user_info, f) # load
with open('user_info.json', 'r', encoding='utf-8') as f:
# res = f.read()
# user_dict = json.loads(res)
# print(user_dict) # load:自动触发f.read()
user_dict = json.load(f)
print(user_dict)

http协议:
请求url:
https://www.baidu.com/

请求方式:
GET

请求头:
  Cookie: 可能需要关注。
  User-Agent: 用来证明你是浏览器
    注意: 去浏览器的request headers中查找
  Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)       Chrome/65.0.3325.146 Safari/537.36
  Host: www.baidu.com

requests模块使用

 import requests

response = requests.get(url='https://www.baidu.com/')
response.encoding = 'utf-8'
print(response) # <Response [200]>
# # 返回响应状态码
print(response.status_code) #
# 返回响应文本
# print(response.text)
print(type(response.text)) # <class 'str'>
with open('baidu.html', 'w', encoding='utf-8') as f:
f.write(response.text)

爬取梨视频

import requests
res = requests.get('视频地址')
print(res.content)
with open('视频.mp4', 'wb') as f:
f.write(res.content)

Python Learning Day3的更多相关文章

  1. python笔记 - day3

    python笔记 - day3 参考:http://www.cnblogs.com/wupeiqi/articles/5453708.html set特性: 1.无序 2.不重复 3.可嵌套 函数: ...

  2. python s12 day3

    python s12 day3   深浅拷贝 对于 数字 和 字符串 而言,赋值.浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  3. python learning Exception & Debug.py

    ''' 在程序运行的过程中,如果发生了错误,可以事先约定返回一个错误代码,这样,就可以知道是否有错,以及出错的原因.在操作系统提供的调用中,返回错误码非常常见.比如打开文件的函数open(),成功时返 ...

  4. Python Learning Paths

    Python Learning Paths Python Expert Python in Action Syntax Python objects Scalar types Operators St ...

  5. Python Learning

    这是自己之前整理的学习Python的资料,分享出来,希望能给别人一点帮助. Learning Plan Python是什么?- 对Python有基本的认识 版本区别 下载 安装 IDE 文件构造 Py ...

  6. python基础 Day3

    python Day3 1.作业回顾 设定一个理想的数字比如88,让用户输入数字,如果比88大,则显示猜测的结果大:如果比66小,则显示猜测的结果小了,给用户三次猜测机会,如果显示猜测正确退出循环,如 ...

  7. Python学习day3作业

    days3作业 作业需求 HAproxy配置文件操作 根据用户输入,输出对应的backend下的server信息 可添加backend 和sever信息 可修改backend 和sever信息 可删除 ...

  8. python基础:day3作业

    修改haproxy配置文件 基本功能:1.获取记录2.添加记录3.删除记录 代码结构:三个函数一个主函数 知识点:1.python简单数据结构的使用:列表.字典等 2.python两个模块的使用:os ...

  9. How to begin Python learning?

    如何开始Python语言学习? 1. 先了解它,Wiki百科:http://zh.wikipedia.org/zh-cn/Python 2. Python, Ruby等语言来自开源社区,社区的学法是V ...

随机推荐

  1. RAM和ROM的区别

    区别如下: 1.概念 RAM(random access memory)即随机存储内存,这种存储器在断电时将丢失其存储内容,故主要用于存储短时间使用的程序.ROM(Read-Only Memory)即 ...

  2. tensorflow学习笔记(二)常量、变量、占位符、会话

    常量.变量.占位符.会话是tensorflow编程的基础也是最常用到的东西,tensorflow中定义的变量.常量都是tensor(张量)类型. 常量tf.constant() tensorflow中 ...

  3. 载域和运行域的理解(ARM程序是怎么运行的)

    对ARM加载域和运行域的理解 一般而言,一个程序包括只读的代码段和可读写的数据段.在ARM的集成开发环境中,只读的代码段和常量被称作RO段(ReadOnly):可读写的全局变量和静态变量被称作RW段( ...

  4. NIFI

    Apache nifi 第一篇(概述) Apache nifi 第二篇(小白初试) nifi数据对接流程初次尝试 NIFI ExecuteSQL配置教程(1.8) Processor(处理器)之配置 ...

  5. 动态弹出框,iframe的name包含一串随机数

    由于name是随机的,要定位name比较困难,此处由于iframe的标签是唯一的,所以可以用tag_name定位 framename=driver.find_element_by_tag_name(& ...

  6. Windows按键消息—虚拟键码(转)

    源地址:http://c.biancheng.net/cpp/html/1253.html 虚拟键码保存在WM_KEYDOWN.WM_KEYUP.WM_SYSKEYDOWN和WM_SYSKEYUP消息 ...

  7. 自己安装windows版本的Flink

    参照 https://blog.csdn.net/clj198606061111/article/details/99694033 我自己做一遍 找到对应的网址 https://flink.apach ...

  8. 在Ubuntu下搭建Android开发环境(AndroidStudio)

    在ubuntu下搭建Android开发环境 本教程的开发环境的搭建有三个大步骤:安装Java jdk,安装Android studio,安装sdk 笔者搭建环境的时候用的是Ubuntu18.04 1. ...

  9. HDU 4866 多校1 主席树+扫描线

    终于是解决了这个题目了 不过不知道下一次碰到主席树到底做不做的出来,这个东西稍微难一点就不一定能做得出 离散化+扫描线式的建树,所以对于某个坐标二分找到对应的那颗主席树,即搜索出结果即可(因为是扫描线 ...

  10. 新版本vue-cli3.x 无法热更新问题【转载】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/weixin_38644883/articl ...