python 基础 爬虫

文章目录

  • 参考资料
    • 文档资料
    • 视频课
  • 准备
  • 语法基础
    • 变量、基础语法
    • 数据结构
    • 运算符
    • 函数
  • 逻辑结构
    • 条件控制
  • 文件操作
  • 正则表达式
  • CGI编程
  • 网络编程
    • Python 免费发送定时邮件
  • 数据库
  • 网络编程--Socket
  • 多线程
    • 爬虫练习

参考资料

文档资料

廖雪峰python教程 文档学习教程可参考
python菜鸟教程 需要用时,可检索查找
python 原版教程 - 英文 英文好可直接看原版教程

视频课

莫烦python
或者哔哩哔哩搜索 莫烦python 、小甲鱼

准备

无需基础,编程语言基本结构。python C++ 等等
1、语法基础:变量命名、运算、数据结构
2、逻辑结构:循环(for while)、判断(if)
3、特性、: 类(Class)
参考资料
编译器:pycharm python
廖雪峰的python教程
python for everybody
莫烦python

语法基础

变量、基础语法

Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。
在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。
等号(=)用来给变量赋值。

counter = 500          # 整型变量
miles   = 500.0       # 浮点型变量
name    = "500"     # 字符串
print(name) # 输出变量
type(name) # 查看变量类型
# 

your_name = input("What is your name: ") # 输入,字符串形式
print(your_name)

缩进:严格的缩进要求,一一对应

数据结构

python3 的六个标准数据类型中:
不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
基本数据类型
注释: 使用 # 或者 ”“” “”“

运算符

python中的运算符

函数

def decide(x):
	if x>2:
	    print (var1)
	elif x<0:
		x = x-2
	    print ("x")
	else:
		x = x + 2
	    print (x)

逻辑结构

条件控制

var1 = 1
var2 = 0
if var1:
    print ("1 - if 表达式条件为 true")
    print (var1)
elif var2:
    print ("2 - if 表达式条件为 true")
    print (var2)
else:
	print(var1,var2)
print ("Good bye!")

文件操作

import calendar

"""生成日历,读写文件"""
# yy = int(input("输入年份:"))
# mm = int(input("输入月份:"))
# print(calendar.month(yy, mm))

with open("test.txt", 'wt') as f:
    f.write("写入了一个文本")
    f.writelines(calendar.month(2000,2))

with open("test.txt", 'rt') as f:
    test = f.read()
    print(test)

正则表达式

re 模块使 Python 语言拥有全部的正则表达式功能

正则表达式

CGI编程

CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP服务器,提供同客户端HTML页面的接口。

网络编程

socket.socket([family[, type[, proto]]])
family: 套接字家族可以使AF_UNIX或者AF_INET
type: 套接字类型可以根据是面向连接的还是非连接分为SOCK_STREAM或SOCK_DGRAM
protocol: 一般不填默认为0

Python 免费发送定时邮件

简单思路:登陆-写邮件-发送
相关模块: smtplib:简单邮件传输协议,在发送邮件过程中起到服务器之间通信
email:服务器之间通信的信息,信息头、信息主题,写邮件,添加附件模块
首先打开邮箱的SMTP功能,登陆,脚本设置分为三个步骤:
1.服务器端信息,邮件主题信息,登陆发送
爬虫小技巧

数据库

网络编程–Socket

socket 被翻译为“套接字”,它是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据
Socket–网络相关信息
主要用途:网络通信,1、本地通信; 2、网络间进程通信:标识主机,标识进程,利用(IP地址、协议、端口)三元组标识网络进程
SOCK_STREAM:表示面向连接的数据传输方式,无损,确保数据的正确性,如HTTP协议
SOCK_DGRAM:表示无连接的数据传输方式,如QQ 视频聊天和语音聊天
TCP/IP协议 传输控制协议和网际协议:提供点对点的链接机制,将数据应该如何封装、定址、传输、路由以及在目的地如何接收,都加以标准化。 三次握手建立连接 四次挥手断开连接
实例:客户端-服务端通信

多线程

_thread 提供了低级别的、原始的线程以及一个简单的锁,它相比于 threading 模块的功能还是比较有限的。

threading 模块除了包含 _thread 模块中的所有方法外,还提供的其他方法:

threading.currentThread(): 返回当前的线程变量。
threading.enumerate(): 返回一个包含正在运行的线程的list。正在运行指线程启动后、结束前,不包括启动前和终止后的线程。
threading.activeCount(): 返回正在运行的线程数量,与len(threading.enumerate())有相同的结果。
除了使用方法外,线程模块同样提供了Thread类来处理线程,Thread类提供了以下方法:

run(): 用以表示线程活动的方法。
start():启动线程活动。
join([time]): 等待至线程中止。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。
isAlive(): 返回线程是否活动的。
getName(): 返回线程名。
setName(): 设置线程名
多线程爬取天气

def get_weather(city):

    req = requests.get('http://wthrcdn.etouch.cn/weather_mini?city=%s' % city)
    dic_city = req.json() # 转换为字典

    city_data = dic_city.get('data')
    # print(city_data)

    if city_data:
        city_forecast = city_data['forecast'][0]
        print(
            city_data.get('city'),
            city_forecast.get('date'),
            city_forecast.get('high'),
            city_forecast.get('low'),
            city_forecast.get('type'),
            '   '
        )
    else:
        print('未获得')
      
threads =  []
files = range(len(cities))
for i in files:
    t = threading.Thread(target = get_weather, args=(cities[i],))
    threads.append(t)

for i in files:
    threads[i].start()

for i in files:
    threads[i].join() #多线程进行
print('\n查询结束')

爬虫练习

爬虫基础
有的网页会禁止非浏览器访问,这时用到headers
python 基础 爬虫_第1张图片
1.了解服务器与本地得交换机制
Request: HTTP.1.1 使用get post 方法,主要使用get方法,request可以显示更多的状态等
Response: 网页返回的信息,status_code==200 表示成功
2.用BeautifulSoup处理获取的数据
Select方法
BeautifulSoup 教程
参考项目:疫情地图

爬虫实例教程
1、了解robots协议,robots:网络爬虫排除标准
如何查看网站的robots协议:在网站后添加/robots.txt,如https://www.baidu.com/robots.txt
python 基础 爬虫_第2张图片

base_url = "https://baike.baidu.com"
his = ["/item/%E7%BD%91%E7%BB%9C%E7%88%AC%E8%99%AB/5162711"]    # 百度百科的爬虫
# his = ["/item/网络爬虫/5162711?fr=aladdin"]

url = base_url + his[-1]

html = urlopen(url).read().decode('utf-8')
soup = BeautifulSoup(html, features='html.parser')
print(soup.find('h1').get_text(), '    url: ', his[-1])

# find valid urls
sub_urls = soup.find_all("a", {
     "target": "_blank", "href": re.compile("/item/(%.{2})+$")})

你可能感兴趣的:(python,python)