首页
开往
统计
留言
Search
1
Docker的基础操作
878 阅读
2
Linux基础基本操作
529 阅读
3
文件压缩
183 阅读
4
Dockerfile构建Nginx镜像
179 阅读
5
mysql字段类型
169 阅读
linux
建站技术
Java
Python
Mysql
其他技术
登录
Search
标签搜索
linux
docker
python
mysql
建站技术
爬虫
java
shell脚本
小钊
累计撰写
14
篇文章
累计收到
0
条评论
首页
栏目
linux
建站技术
Java
Python
Mysql
其他技术
页面
开往
统计
留言
搜索到
1
篇与
的结果
2024-06-24
python爬虫教程
requests库及lxml库入门靶场地址:http://spiderbuf.cn/s01/from lxml import etree import requests import csv html = requests.get("http://spiderbuf.cn/s01/").text # 取网页源码 parse_html = etree.HTML(html) # 解析html data = [] # 初始化数据列表 data.append(parse_html.xpath("//thead/tr/th/text()")) # 取标头内容并添加到数据列表 f = open("info.csv", 'w', encoding='utf-8', newline='') # 使用w打开info.csv文件 csv = csv.writer(f) # 创建csv对象 table = parse_html.xpath("//tbody//tr") # 取所有的数据列 for i in table: # 循环每个数据列 data.append(i.xpath(".//td//text()")) # 读取每列的数据并添加到数据列表 csv.writerows(data) # 调用函数写入csv文件此次练习使用了1.lxml库的etree类,用于解析html并取相关数据2.requests库,用于发起网页请求,获取网页源码3.csv库,用于保存爬取到的数据2.http请求分析及头构造使用靶场地址:http://spiderbuf.cn/s02/import requests import csv from lxml import etree headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0" } html = requests.get(url="http://spiderbuf.cn/s02/", headers=headers).text # 取网页源码 parse_html = etree.HTML(html) # 解析html data = [] # 初始化数据列表 data.append(parse_html.xpath("//thead/tr/th/text()")) # 取标头内容并添加到数据列表 f = open("info.csv", 'w', encoding='utf-8', newline='') # 使用w打开info.csv文件 csv = csv.writer(f) # 创建csv对象 table = parse_html.xpath("//tbody//tr") # 取所有的数据列 for i in table: # 循环每个数据列 data.append(i.xpath(".//td//text()")) # 读取每列的数据并添加到数据列表 csv.writerows(data) # 调用函数写入csv文件此题与第一题的区别是添加了请求头,因为网页做了请求头校验requests默认的请求头是python分页参数分析及翻页爬取靶场地址:http://spiderbuf.cn/s04/?pageno=1from lxml import etree import requests import csv data = [] # 初始化数据列表 f = 1 # 标记是否是首次运行 for i in range(1, 6): # 循环页数 url = "http://spiderbuf.cn/s04/?pageno="+str(i) # 拼接url print(url) html = requests.get(url).text # 取网页源码 parse_html = etree.HTML(html) # 解析html if f: data.append(parse_html.xpath("//thead/tr/th/text()")) # 取标头内容并添加到数据列表 f = 0 # 运行后将值更改为0即非第一次运行 table = parse_html.xpath("//tbody//tr") # 取所有的数据列 for i in table: # 循环每个数据列 td = i.xpath(".//td//text()") td.pop(0) data.append(td) # 读取每列的数据并添加到数据列表 f = open("info.csv", 'w', encoding='utf-8', newline='') # 使用w打开info.csv文件 csv = csv.writer(f) # 创建csv对象 csv.writerows(data) # 调用函数写入csv文件这题难点在于拼接字符串时的数据类型,与初始化数据列表放置的位置无序号翻页靶场地址:http://spiderbuf.cn/e03/import requests from lxml import etree import csv data = [] def get_page_info(url: str) -> list: global data html = requests.get(url).text # 获取初始页内容 parse_html = etree.HTML(html) table = parse_html.xpath("//tbody//tr") # 取所有的数据列 for i in table: # 循环每个数据列 data.append(i.xpath(".//td//text()")) # 读取每列的数据并添加到数据列表 return data html = requests.get("http://spiderbuf.cn/e03/").text # 获取初始页内容 parse_html = etree.HTML(html) # 调用方法解析html text = parse_html.xpath('//ul[@class="pagination"]//li//a//@href') """ xpath解析: //ul[@class="pagination"] 从网页根进行匹配类名为pagination的ul列表 //li 继续从上衣一步中继续匹配li元素 //a 继续从上一步中继续匹配a元素 //@href 继续从上一步取出href属性的值 """ data.append(parse_html.xpath("//thead/tr/th/text()")) # 取标头内容并添加到数据列表 for path in text: # 循环列表取每页page的名称 url = "http://spiderbuf.cn/e03/" + path # 拼接当前page的链接 get_page_info(url) # 调用函数进行读取当前page下的数据 f = open("info.csv", 'w', encoding='utf-8', newline='') # 使用w打开info.csv文件 csv = csv.writer(f) # 创建csv对象 csv.writerows(data) # 调用方法将文件写入csv文件内难点:在于他的页路径不是有规律的,而是无规律的,需要使用xpath获取到每页的页索引
2024年06月24日
154 阅读
0 评论
0 点赞