show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 上次真的爬了一个网站
- oeasy.org
- 想要得到 菜单上的所有链接
- 获取 xpath
- 右键检查元素
- 爬取之后
- 获得属性 href 的值
- 然后切片并拼接为绝对链接地址
- 并且存储到了 urls.txt 中
- 能进入 这些得到的链接
- 再去 深入爬取 吗?🤔
- 另开
- 一个o2z.py
- 然后打开修改
import requests
from lxml import etree
with open("urls.txt") as f:
urls = f.readlines()
for url in urls:
response = requests.get(url)
b_html = response.content
et_html = etree.HTML(b_html)
et_targets = et_html.xpath(".")
for et_target in et_targets:
print(et_target.tag)
- 运行出现了 12 次 html 节点
import requests
from lxml import etree
with open("urls.txt") as f:
urls = f.readlines()
for url in urls:
response = requests.get(url)
b_html = response.content
print(b_html)
et_html = etree.HTML(b_html)
et_targets = et_html.xpath(".")
for et_target in et_targets:
print(et_target.tag)
- 结果
- 爬取到的页面为404
- 结果
- 原来是每个网址后面
- 多了个
\n
- 多了个
import requests
from lxml import etree
with open("urls.txt") as f:
urls = f.readlines()
for url in urls:
url = url.replace("\n","")
response = requests.get(url)
b_html = response.content
print(b_html)
et_html = etree.HTML(b_html)
et_targets = et_html.xpath(".")
for et_target in et_targets:
print(et_target.tag)
- 替换掉回车标记
- 响应 不再 是404了
- 右键单击看电路基础
- 检查元素
- 第一个子栏目
- 爱情 和 其他子栏目不同
- 从列表中 切去
- 找到电路基础的xpath
- /html/body/div/div[1]/div[1]
import requests
from lxml import etree
with open("urls.txt") as f:
urls = f.readlines()[1:]
for url in urls:
url = url.replace("\n","")
response = requests.get(url)
b_html = response.content
et_html = etree.HTML(b_html)
et_targets = et_html.xpath("/html/body/div/div[1]/div[1]")
for et_target in et_targets:
print(et_target.text)
- 得到每个子页面的
- 第一个栏目名
- 想要得到每个子页面的
- 所有栏目名呢?
- 查找到每个链接
- 除了课程名
- 还想保存教程网址
- 找到 和旧版 的关联性
- 一个题目
- 对应 一个链接
import requests
from lxml import etree
with open("urls.txt") as f:
urls = f.readlines()[1:]
for url in urls:
url = url.replace("\n","")
response = requests.get(url)
b_html = response.content
et_html = etree.HTML(b_html)
et_targets = et_html.xpath("/html/body/div/div/div[1]")
et_links = et_html.xpath("/html/body/div/div/div[2]/a[1]")
for num in range(len(et_targets)):
print(et_targets[num].text,end=",")
print(et_links[num].attrib["href"])
- 结果
- 可以把各个网址输出到屏幕
- 可以将输出结果
- 重定向到文本吗?
- :w|!python3 % > urls.csv
- 输出重定向 到一个csv文件
- 可以理解为
- 一个文本形式的
- 电子表格
- 可以用电子表格打开吗?
sudo apt update
yes|sudo apt install libreoffice
- 安装完毕
libreoffice urls.csv
- 打开电子表格
- 我们先爬的是首页
- 爬出很多链接
- 然后存到 urls.txt 的里面
- 然后遍历 urls 里面的每一个地址
- 得到课程的名字和链接
- 然后入库
- 可以 将数据 放入
- 真正的数据库吗?
- 更新系统安装 postgres
- 启动 postgres
- 并以 postgres 登录
sudo apt update
yes | sudo apt install postgresql
sudo /etc/init.d/postgresql start
sudo -u postgres psql
- 查看所有数据库 database
\l
- 建立数据库 oeasy
- 并进入
CREATE DATABASE
oeasy;
\l
- 按q</kbd
- 退出查询
\c oeasy
\dt
CREATE TABLE urls(
topic varchar,
url varchar
);
\dt
- 建表并查看
\COPY urls FROM '/home/shiyanlou/urls.csv' DELIMITER ',' CSV ;
- 导入33条
SELECT
*
FROM
urls
WHERE
topic LIKE '%e%'
;
- 结果
SELECT
*
FROM
urls
WHERE
LENGTH(topic) > '5'
;
- 筛选结果
- 这次真的爬了一个网站
- oeasy.org
- 右键检查元素
- 获取 xpath
- 爬取之后获得属性 href 的值
- 然后切片并拼接为绝对链接地址
- 并且把每一个链接都爬了一遍
- 能出去爬个百度么?🤔
- 下次再说