注:本文代码无法直接复现 建议看思路具体亲自去尝试写一下 后面争取更新一个直接可复用的代码案例
# 爬虫:按照一定的规则 自动的 抓取 万维网信息 程序 脚本
# 如果 用python 可以做到 模仿 人类发送请求
# 如果 服务器 接收后 骗过 浏览器 让他以为是一个真实的用户
# 服务器 返回后 我们只要 接收他的返回值
# 然后 自己解析
# 把解析后 有用的信息 留下 保存
# 重复动作
#第一种方法:(还可以用requests)
from urllib import request
# 1 发送请求
response = request.urlopen(url='http://www.baidu.com')
# 我们发现 response 对象我们不认识 我们就调用了一个read函数
# 2 接收响应 解析响应内容
html = response.read().decode('utf-8')
# print(h) # <http.client.HTTPResponse object at 0x0000000002A08FD0>
# 解析 源代码
# re ——正则表达式 最不好学会 或者 是最不好用 速度 最快
# bs4 —— 最容易 使用 速度 慢 需要 安装
# 解析
from bs4 import BeautifulSoup # 这是导入 bs
# 参数1 接收一个等待被解析的对象
# 参数2 接收一个解析器
# html.parser:这个 是python自带的一个解析器 可以直接写它的名字
# 或者 可以传入一个 lxml 第三方的模块
soup = BeautifulSoup(h, 'lxml')
# 这个是个查找的方法 可以 查找"标签"
title = soup.select('title')
div = soup.select('div')
print(title[0]) # 返回值是个"列表"
print(div[1])
# 有用的内容 保存下来
# 第一个参数 :我们要写入的的文件 我们想往哪里写
# 第二个参数: w是一种 写入的模式 先判断 是否有这个文件 如果有 就清除文件内容 然后 写入
# 如果没有这个文件 就先创建 然后 写入内容
# a 追加模式 先判断 是否有这个文件 如果有 就打开这个文件后 开始追加内容
# 如果没有 就创建文件 然后 写入内容
# r 读取 只读模式 如果有 就读取 如果没有 就报错了
f = open('baidu.html', 'w', encoding='utf-8')
f.write(html) # 把我们 爬取到的html 网页的源代码 写入进去 baidu.html的文件中
f.close()
案例二:
from bs4 import BeautifulSoup
from urllib import request
url = 'http://quotes.toscrape.com/' #练习爬虫的网站
response = request.urlopen(url)
# html = response.read().decode()# 这个decode有个默认值是utf-8
# print(html)
# 已存在名言.html后:
f = open('名言.html', 'r', encoding='utf-8')
html = f.read()
# f.write(html)
# f.close()
# # print(html)
soup = BeautifulSoup(html, 'lxml')
span = soup.select('a') #
# 其实 在select中还可以 输入 一些其他的内容
# class='text' 那么说 我们就可以直接写 '.text'(css用法)
#并列的class name用空格隔开
# id='tag'或直接 '#tag'
# 用 get方法 获取 “属性”
print(len(span)) # 这里用 span这个标签名 拿到了 32个span的内容但是 我们一共有多少个?
for i in span:
print(i.get('href'))