爬虫练习

说是练习,实际是尝试了一些还没有具体了解的方式吧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. eclipse、idea中自动生成元模型JPA元模型对象

    一.eclipse 1.首先准备好两个jar包hibernate-jpa-2.0-api-1.0.1.Final和hibernate-jpamodelgen-4.3.5.Final 2.选中项目右击 ...

  2. SPI协议解析

    1. SPI物理层 SPI通讯需要使用4条线:3条总线和1条片选 . SPI遵循主从模式,3条总线分别是SCK.MOSI和MISO,片选线为nSS(低电平有效),SPI协议适用于一主多从的工作场景: ...

  3. 九十四、SAP中ALV事件之八,显示功能按钮栏

    一.我们把其他代码都注释掉,直接写一行调用 SET PF-STATUS 'TIANPAN_TOOLS'. 二.运行程序,会看到我们上一篇所添加的相关功能栏图标, 三.点击不同图标,会按程序代码,有不同 ...

  4. HDU 4819 二维线段树

    13年长春现场赛的G题,赤裸裸的二维线段树,单点更新,区间查询 不过我是第一次写二维的,一开始写T了,原因是我没有好好利用行段,说白一点,还是相当于枚举行,然后对列进行线段树,那要你写二维线段树干嘛 ...

  5. oracle中判断"非"

    在oracle中判断为"非"最常见的两种情况,一个是"不等于",一个的"非空". 通过查找资料得知,oracle中判断不等于的方法有好多种: ...

  6. Elasticsearch 使用集群 - 列出索引

    章节 Elasticsearch 基本概念 Elasticsearch 安装 Elasticsearch 使用集群 Elasticsearch 健康检查 Elasticsearch 列出索引 Elas ...

  7. ACM-单词接龙

    题目描述:单词接龙 问题描述:单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们己知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙" 中出现 ...

  8. M: Mysterious Conch 字符串哈希

    Problem Description小明有一个神奇的海螺,你对海螺说一段字符串,海螺就会返回一个单词,有字符串里面的所有字符组成如告诉海螺“lloeh”海螺则会告诉你“hello”如果有多个单词对应 ...

  9. ORM——Mybatis

    引言 ORM 是 blablabla…… Mybatis知识点

  10. php条件判断(9.29 第十五天)

    超级全局变量:$GLOBALS //包含全部变量的全局组合数组$_SERVER //包含请求头中的信息,用户的IP.用户的UA.头信息$_REQUEST //包含用户提交的所有数据(POST/GET ...