爬虫练习

说是练习,实际是尝试了一些还没有具体了解的方式吧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. 022、MySQL字符串的拼接

    SELECT CONCAT('曾经沧海难为水-','-除却巫山不是云') #字符串拼接 SELECT CONCAT('AB','CD','EF'); #ABCDEF #字符串拼接 SELECT CON ...

  2. 吴裕雄--天生自然java开发常用类库学习笔记:Map接口使用的注意事项

    import java.util.HashMap ; import java.util.Map ; import java.util.Set ; import java.util.Iterator ; ...

  3. 《ES6标准入门》(阮一峰)--7.数值的扩展

    1.二进制和八进制表示法 ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示. 0b111110111 === 503 // true 0o767 === 503 ...

  4. mysql基本知识的总结

    Mysql基本sql知识 Navicat快捷方式: 选中当前行 在行尾:shift+home 在行首:shift+end 执行当前行:ctrl+shift+R 复制当前行:ctrl+D 显示所有数据库 ...

  5. linux下安装mysql5.7(centos6.0)

    注:因为网络原因,这个mysql安装是我以前在学校的时候找到的一个安装包,不过也找到了下载的地址:http://www.itmop.com/downinfo/143061.html下载完成后,把文件上 ...

  6. cf 543 D. Road Improvement

    (懒得想了,,又是DP) #include<bits/stdc++.h> #define N 200005 #define LL long long #define inf 0x3f3f3 ...

  7. VS Code 单文件、多文件(工程) 配置文件

    针对于单文件编译运行,需要在代码文件夹下建立子文件夹 .vscode ,并放置三个文件 1:c_cpp_properties.json,注意更改7.8.11行的路径 { "configura ...

  8. SPOJ_DSUBSEQ Distinct Subsequences

    统计一个只由大写字母构成的字符串的,子串数目,这里指的是子串不是子序列,可以不连续,请注意 然后我按照计数DP的思想,dp[i][j]表示长度为i的子串,最后一个字母为j 然后为了去重,每一次dp的时 ...

  9. PHP数组创建和遍历(基础)

    数组定义PHP数组可以是混合数组 你的数组里面可以有数字也可以有字符串,二维数组不谈一个数组里还有数组跟C有差别定义方式例如 $dd=array(array(1,2,3),array(1,2,3,4) ...

  10. javaweb利用ajax使登录窗口不跳转页面实现对账号密码的判断

    和上一篇判断用户名是否被占用不跳转页面类似!利用ajax实现跳转,要导入jquery文件库!具体代码我会贴出来,注释在里面!!可以观摩一手!(代码我也留下链接,如果失效,评论补发,代码可能导入也无法使 ...