Python爬虫学习(打卡day1)

1.爬虫必备的Python基础

1.1 字符串

字符串在爬虫里. 必须要知道的几个操作:

  1. 索引和切片
    s = "今天下好大的雨"
    print(s[1])# 天
    print(s[0])# 今
    # 从第2个, 到第4个(取不到4)
    print(s[2:4]) # 下好

  2. strip()

    我们从网页上提取的数据. 很多都是带有一些杂质的(换行, 空格),怎么去掉?

    strip()可以去掉字符串左右两端的空白(空格, 换行\n, 回车\r, 制表符\t)

    s = "    \t\t\t我的天哪\r\r      \n\n  "  # 够乱的字符串
    s1 = s.strip()
    print(s1)  # 我的天哪

  3. split(),分割字符串,在不传入参数的情况下默认以" "为分割值

    s = "10,男人本色,100000万"  # 你在网页上提取到这样的一段数据. 现在我需要电影名称
    tmps = s.split(",")
    name = tmps[1]
    print(name)  # 男人本色
    ​
    id, name, money = s.split(",")  # 切割后. 把三个结果直接怼给三个变量
    print(id)
    print(name)
    print(money)

  4. replace(),替换

    s = "10,男人本色,100000万"
    s = s.replace("10","100")
    print(s)  # 100 男人本色 100000万

  5. join(),将列表拼接成一个字符串

    lst = ["How","are","you"]
    res = " ".join(lst)
    print(res) # How are you

  6. f-string.字符串的格式化输出

    k = 10085
    s2 = f"我的电话号是{k+1}" # 它会把计算结果赛入一个字符串
    print(s2)  # 我的电话号是10086

注意:在字符串中存在一个大坑,字符串的所有操作都不会改变原来的字符串,而是生成新的字符串,所以我们每次进行字符串操作的时候需要对返回值进行接收,不然我们很可能得不到我们想要的结果。

1.2列表

  1. 索引和切片

    和字符串完全一致

  2. 增、删、查、改

    lst = ["apple", "banana", "pear", "orange", "mango", "grape"]
    # 增加
    print(lst)  # ['apple', 'banana', 'pear', 'orange', 'mango', 'grape']
    # 删除
    lst.remove("banana")
    print(lst)  # ['apple', 'pear', 'orange', 'mango', 'grape']
    # 查找
    print(lst[2])  # orange
    print(lst[-1])  # grape
    # 修改
    lst[0] = "strawberry"
    print(lst)  # ['strawberry', 'pear', 'orange', 'mango', 'grape']

  3. 循环列表

    lst = ["apple", "banana", "pear", "orange", "mango", "grape"]
    # 循环列表 第一种方法
    for i in range(0, len(lst)):
        print(lst[i])
    # 循环列表 第二种方法
    for fruit in lst:
        print(fruit)

注意:如果给出的索引下标超过了列表的最大索引,那么会报错, Index out of bounds,如果你给的下标是0,那么我们的爬虫并没有拿到内容,需要进行修改

1.3字典

  1. 增、删、查、改

    dic = {"name": "小明", "age": 18, "sex": "男"}
    # 增加
    print(dic)  # {'name': '小明', 'age': 18, 'sex': '男'}
    # 修改
    dic["sex"] = "女"
    print(dic)  # {'name': '小明', 'age': 18, 'sex': '女'}
    # 删除
    dic.pop("sex")
    print(dic)  # {'name': '小明', 'age': 18}
    # 查找
    print(dic.get("name"))  # 小明
    print(dic["name"]) # 这两种查找在字典中存在key时是一样的,但是在字典中不存在key时这种方法会报错
    # 清空
    dic.clear()
    print(dic)  # {}

  2. 循环

    dic = {"name": "小明", "age": 18, "sex": "男"}
    # 循环
    for key in dic:
        print(key)  # name age
        print(dic[key])  # 小明 18

  3. 嵌套

    # 字典嵌套字典
    dic = {"name": "小明", "age": 18, "sex": "男", "info":
        {"height": 170, "weight": 60}}
    # 访问内容
    print(dic["info"]["height"])  # 170

1.4 字符集和bytes

记住常用的两种常用的字符集:一个是utf-8, 一个是gbk

字符串和bytes的相互转化:

# 把字符串转化成字节
bs = "我的天哪abcdef".encode("utf-8")
print(bs)  #  b'\xe6\x88\x91\xe7\x9a\x84\xe5\xa4\xa9\xe5\x93\xaaabcdef'
# 一个中文在utf-8里是3个字节. 一个英文是一个字节. 所以英文字母是正常显示的
​
# 把字节还原回字符串
bs = b'\xe6\x88\x91\xe7\x9a\x84\xe5\xa4\xa9\xe5\x93\xaaabcdef'
s = bs.decode("utf-8")
print(s)

1.5文件操作

两种写法:

# 第一种
f = open(文件名, mode="模式", encoding='文件编码')
f.read()|f.write()
f.close() # 记住将打开的文件流关闭
# 第二种
with open(文件名, mode=模式, encoding=编码) as f:
    pass

模式: 我们需要知道的主要有4个. 分别是: r, w, a, b

  1. r 只读模式. 含义是, 当前这一次open的目的是读取数据. 所以, 只能读. 不能写

  2. w 只写模式. 含义是, 当前这一次open的目的是写入数据. 所以, 只能写, 不能读

  3. a 追加模式. 含义是, 当前这一次open的目的是向后追加. 所以, 只能写, 不能读

  4. b 字节模式. 可以和上面三种模式进行混合搭配. 目的是. 写入的内容或读取的内容是字节.

1.6模块

模块是啥? 模块就是已经有人帮我们写好了的一些代码, 这些代码被保存在一个py文件或者一个文件夹里. 我们可以拿来直接用

在python中有三种模块.

第一种, python内置模块

不用安装. 直接导入就能用

第二种, 第三方模块

需要安装. 安装后. 导入就可以用了

第三种, 自定义模块(新手先别自己定义模块)

直接导入就能用

导入模块的语法

import 模块
from 模块 import 功能
from 模块.子模块 import 功能
​
举例子, 
import os
import sys
from urllib.parse import urljoin
from bs4 import BeautifulSoup

搞爬虫.必须要了解的一些python内置模块

  1. time模块

    import time
    time.time()  # 这个是获取到时间戳
    time.sleep(999)  # 让程序暂停999秒

  2. os模块

    import os
    # 判断文件是否存在
    os.path.exists()  #  判断文件或者文件夹是否存在
    os.path.join()    # 路径拼接
    os.makedirs()     # 创建文件夹

  3. json模块(重中之重)

    现在的网站不同于从前了. 习惯性用json来传递数据. 所以, 我们必须要知道json是啥, 以及python如何处理json.

    json是一种类似字典一样的东西. 对于python而言, json是字符串.

    例如,

    s = '{"name": "jay", "age": 18}'

    你看. 这破玩意就是json

    如何来转化它.

    json字符串 => python字典

    import json
    s = '{"name": "jay", "age": 18}'
    dic = json.loads(s)
    print(type(dic))

    python字典 => json字符串

    import json
    dic = {"name": "jay", "age": 18}
    s = json.dumps(dic)
    print(type(s))

  4. random模块

    随机. 没别的用处.生成随机数

    import random
    i = random.randint(1, 10)  # 1~10的随机数
    print(i)   # 多跑两次.效果更佳

2.爬虫入门

2.1什么是爬虫

我的理解:爬虫就是通过程序来模拟浏览器请求,帮助我们拿到我们在浏览器上能看到的东西

2.2为什么用python进行爬虫

Python是众多编程语言中, 小白上手最快, 语法最简单. 更重要的是, 这货有非常多的关于爬虫能用到的第三方支持库.

2.3第一个爬虫

在python中, 我们可以直接用urllib模块来完成对浏览器的模拟工作~, 直接上代码

from urllib.request import urlopen
​
resp = urlopen("http://www.baidu.com")  # 打开 百度
print(resp.read().decode("utf-8"))  # 打印 抓取到的内容

我们可以把抓取到的html内容全部写入到文件中, 然后和原版的百度进行对比, 看看是否一致

from urllib.request import urlopen
​
resp = urlopen("http://www.baidu.com")  # 打开 百度
​
# print(resp.read().decode("utf-8"))  # 打印 抓取到的内容
​
with open("baidu.html", mode="w", encoding="utf-8") as f:  # 创建文件
    f.write(resp.read().decode("utf-8"))  # 保存在文件中

2.4使用requests模块进行爬虫

在前面小节中, 我们使用urllib来抓取页面源代码. 这个是python内置的一个模块. 但是, 它并不是我们常用的爬虫工具. 常用的抓取页面的模块通常使用一个第三方模块requests. 这个模块的优势就是比urllib还要简单, 并且处理各种请求都比较方便.

既然是第三方模块, 那就需要我们对该模块进行安装, 安装方法:

pip install requests

OK. 接下来我们来看看requests能带给我们什么?

我们将上面的代码换成requests试一试:

import requests
​
resp = requests.get("http://www.baidu.com")  # 请求 百度
print(resp.text)  # 打印响应内容
with open("baidu.html", mode="w", encoding="utf-8") as f:  # 创建文件
    f.write(resp.text)  # 保存在文件中

3.总结

今天复习了python的基本语法,几种重要的数据类型,文件操作,字符集和模块等知识,了解了什么是爬虫,并开始写了第一个入门级爬虫。(收获满满,明天也要加油呀!)

  • 18
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

科男小林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值