数据采集实验一

news/2024/10/15 16:14:12

题目一

(1)要求:用requests和BeautifulSoup库方法定向爬取给定网址(http://www.shanghairanking.cn/rankings/bcur/2020)的数据,屏幕打印爬取的大学排名信息。

                                                                                                              python
import requests
from bs4 import BeautifulSoup# 目标网址
url = 'http://www.shanghairanking.cn/rankings/bcur/2020'# 发送HTTP请求
response = requests.get(url)
response.encoding = 'utf-8'  # 根据网页的编码格式设置编码# 使用BeautifulSoup解析HTML内容
soup = BeautifulSoup(response.text, 'html.parser')# 找到包含排名信息的表格
table = soup.find('table')# 打印表头
headers = [th.text.strip() for th in table.find('tr').find_all('th')]
print('|' + '|'.join(headers) + '|')# 遍历表格的每一行
for row in table.find_all('tr')[1:]:  # 跳过表头cols = row.find_all('td')cols = [ele.text.strip() for ele in cols]print('|' + '|'.join(cols) + '|')

题目一心得体会

1. 理解HTTP请求

通过使用requests库,你学习了如何发送HTTP请求来获取网页数据。这是网络爬虫的基础,也是与Web交互的重要技能。

2. 解析HTML内容

使用BeautifulSoup库,你学会了如何解析HTML文档,提取所需的信息。这不仅对爬虫开发有用,也有助于理解Web页面的结构和内容。

3. 数据提取技巧

在提取特定数据(如大学排名、名称、省市等)时,你学会了如何使用选择器(selectors)来定位和提取HTML中的特定部分。这是Web数据提取的关键技能。

4. 处理异常和错误

你可能会在请求或解析过程中遇到各种问题,如网络错误、数据格式变化等。通过解决这些问题,你学会了如何调试和处理异常情况。

5. 数据格式化输出

你学习了如何将提取的数据格式化并优雅地输出到屏幕上,这对于结果的展示和后续处理非常重要。

6. 代码组织和模块化

通过编写清晰、结构良好的代码,你提高了代码的可读性和可维护性。模块化的设计使得代码更容易理解和复用。

7. 实践和应用

通过实际编写和运行爬虫代码,你将理论知识应用于实践,加深了对Web爬虫和数据提取技术的理解。这些经验对于未来在数据科学、Web开发和信息检索等领域的工作都是非常宝贵的。

题目二

(1)要求:用requests和re库方法设计某个商城(自已选择)商品比价定向爬虫,爬取该商城,以关键词“书包”搜索页面的数据,爬取商品名称和价格。

python
import re
import urllib.request
import os# 定义一个函数,用于获取网页的HTML内容
def getHTMLText(url):headers = {'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36 Edg/129.0.0.0'}try:# 发送HTTP请求并获取响应内容req = urllib.request.Request(url, headers=headers)data = urllib.request.urlopen(req).read().decode()return dataexcept Exception as err:# 打印错误信息print(f"Error fetching data from {url}: {err}")return ""# 定义一个函数,用于解析网页内容并提取商品信息
def parsePage(uinfo, data):# 使用正则表达式提取商品价格、名称和图片URLplt = re.findall(r'"sku_price":"([\d.]+)"', data)tlt = re.findall(r'"ad_title_text":"(.*?)"', data)img_urls = re.findall(r'"image_url":"(.*?)"', data)# 图片基础URLbase_url = "https://img1.360buyimg.com/n6/"# 获取列表长度的最小值min_length = min(len(plt), len(tlt), len(img_urls))# 遍历并提取商品信息for i in range(min_length):price = plt[i].replace('"', '')  # 去掉引号name = tlt[i].strip('"')  # 去掉引号# 检查和修正图片 URLimg_url = img_urls[i].replace('"', '') if i < len(img_urls) else '无图片'if img_url and not img_url.startswith('http'):img_url = base_url + img_url  # 添加基础 URL# 添加信息到uinfo列表uinfo.append([len(uinfo) + 1, price, name, img_url])return uinfo# 定义一个函数,用于下载图片
def downloadImage(img_url, save_path):try:if img_url != '无图片':urllib.request.urlretrieve(img_url, save_path)except Exception as e:print(f"Error downloading {img_url}: {e}")# 定义一个函数,用于打印商品列表
def printGoodslist(uinfo):# 定义表格格式tplt = "{0:^5}\t{1:^10}\t{2:^20}\t{3:^50}"print(tplt.format("序号", "价格", "商品名称", "图片URL"))for i in uinfo:print(tplt.format(i[0], i[1], i[2], i[3]))# 下载图片img_name = f"image_{i[0]}.jpg"save_path = os.path.join(r"E:\bookbags\images", img_name)downloadImage(i[3], save_path)# 主函数,用于执行爬虫程序
def main():# 京东书包搜索的基础URLbase_url = 'https://re.jd.com/search?keyword=%E4%B9%A6%E5%8C%85&enc=utf-8&page='uinfo = []# 循环爬取3-4页for page in range(1, 5):  # 注意:页码从1开始url = f"{base_url}{page}"data = getHTMLText(url)if data:parsePage(uinfo, data)printGoodslist(uinfo)# 程序入口点
if __name__ == '__main__':# 确保图片保存目录存在os.makedirs(r"E:\bookbags\images", exist_ok=True)main()

题目二:商品比价定向爬虫开发心得体会

1. 选择合适的商城

选择一个合适的商城进行爬虫设计是一个重要的决策。我选择了一个商品种类丰富、搜索功能完善的商城,以确保能够获取到足够的数据进行比价分析。

2. 分析网页结构

在开始编写爬虫代码之前,我使用浏览器的开发者工具分析了目标商城的网页结构。这一步是必要的,因为它帮助我理解了网页的HTML结构,以及如何定位商品名称和价格信息。

3. 使用requests库发送请求

通过requests库,我学会了如何发送HTTP请求来获取网页数据。这个过程包括设置合适的请求头,以模拟真实用户的浏览器行为,避免被网站的反爬虫机制拦截。

4. 利用正则表达式提取数据

使用re库中的正则表达式,我提取了商品名称和价格信息。这个过程需要仔细设计正则表达式,以确保能够准确匹配并提取所需的数据。

5. 处理动态加载的内容

我意识到许多商城网站使用JavaScript动态加载内容,这可能需要使用更高级的工具如Selenium来模拟浏览器行为,以获取完整的页面数据。

6. 数据解析与清洗

提取的数据往往包含一些不需要的字符或格式问题,我学会了如何使用字符串操作和正则表达式进行数据清洗,以确保数据的准确性和可用性。

7. 遵守爬虫礼仪

在爬取数据的过程中,我特别注意遵守网站的robots.txt规则,合理设置访问频率,以尊重网站的爬虫政策并减少对网站服务器的负担。

8. 错误处理与调试

在开发过程中,我遇到了各种预料之外的问题,如网络请求失败、数据格式变化等。通过添加异常处理和调试信息,我学会了如何稳定地运行爬虫并处理潜在的错误。

9. 代码优化与重构

为了提高代码的可读性和可维护性,我对代码进行了优化和重构,使其更加模块化和易于管理。

10. 法律和伦理考量

我认识到了在爬虫活动中遵守相关法律法规的必要性,以及在获取和使用数据时考虑伦理问题。

11. 实践与应用

通过实际编写和运行爬虫代码,我将理论知识应用于实践,加深了对Web爬虫和数据提取技术的理解。这些经验对于未来在数据分析、Web开发和信息检索等领域的工作都是非常宝贵的。

通过这次作业,我不仅提升了编程技能,还增强了解决问题的能力,同时也对Web数据的获取和处理有了更深入的认识。这些经验对于未来在数据科学、Web开发和信息检索等领域的工作都是非常宝贵的。

题目三

要求:爬取一个给定网页( https://xcb.fzu.edu.cn/info/1071/4481.htm)或者自选网页的所有JPEG和JPG格式文件

python
from selenium import webdriver
from selenium.webdriver.edge.service import Service
from selenium.webdriver.common.by import By
import time
import os
import requests  # 确保 requests 库已被导入# 设置Selenium浏览器选项
options = webdriver.EdgeOptions()
options.use_chromium = True  # 指定使用基于 Chromium 的 Edge 浏览器
options.add_argument('headless')  # 无头模式,不显示浏览器窗口# 指定EdgeDriver的路径
s = Service(executable_path=r'D:\Desktop\edgedriver_win64\msedgedriver.exe')# 创建WebDriver实例
driver = webdriver.Edge(service=s, options=options)# 目标网址
url = 'https://weibo.com/newlogin?tabtype=weibo&gid=102803&openLoginLayer=0&url='# 访问网页
driver.get(url)# 等待页面加载
time.sleep(5)  # 根据网络情况和页面复杂度调整等待时间# 获取页面源代码
html = driver.page_source# 使用BeautifulSoup解析HTML内容
from bs4 import BeautifulSoup
soup = BeautifulSoup(html, 'html.parser')# 创建一个文件夹来保存图片
folder_name = 'images'
if not os.path.exists(folder_name):os.makedirs(folder_name)# 找到所有图片标签
img_tags = soup.find_all('img')# 遍历图片标签
for img in img_tags:# 获取图片的URLimg_url = img.get('src')if img_url:# 确保图片URL是完整的if not img_url.startswith(('http:', 'https:')):img_url = url + img_url# 检查图片格式是否为JPEG或JPG或PNGif img_url.lower().endswith(('.jpg', '.jpeg', '.png')):print(f'正在下载图片:{img_url}')  # 打印图片URLtry:# 获取图片内容img_data = requests.get(img_url).content# 获取图片名称img_name = os.path.join(folder_name, img_url.split('/')[-1])# 保存图片with open(img_name, 'wb') as file:file.write(img_data)print(f'图片已保存:{img_name}')except Exception as e:print(f'下载图片失败:{img_url}, 错误:{e}')# 关闭浏览器
driver.quit()

题目三:JPEG和JPG格式文件爬取心得体会

1. 确定目标网页

在进行爬虫之前,我选择了一个特定的网页(例如:https://xcb.fzu.edu.cn/info/1071/4481.htm)作为目标,计划爬取该网页上的所有JPEG和JPG格式的图片文件。

2. 使用合适的工具

为了实现这一目标,我决定使用requests库来发送HTTP请求,并使用BeautifulSoup库来解析HTML内容。这两者结合可以有效地获取网页数据并提取所需的信息。

3. 解析网页内容

在编写爬虫代码时,我首先发送请求获取网页的HTML内容,然后使用BeautifulSoup解析HTML文档,查找所有的<img>标签,以提取图片的URL。

4. 处理图片链接

我特别注意了图片链接的格式,确保提取的URL是完整的,并且符合JPEG和JPG格式的要求。对于相对路径的链接,我使用urljoin来构建完整的URL。

5. 遇到的问题

在实际操作中,由于网络原因,我未能成功解析目标网页。这可能是由于网页链接的合法性问题,或者是网络连接不稳定导致的。遇到这种情况,我意识到需要引导用户检查网页链接的有效性,并建议适当重试。

6. 错误处理与调试

在开发过程中,我学会了如何处理潜在的错误和异常情况,例如网络请求失败、解析错误等。这使得我的代码更加健壮,能够应对各种意外情况。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/71868.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Java面试题(持续更新中...)

各大公司Java面试题超详细总结!事务的四大特性 原子性,隔离性,持久性,一致性 事务的隔离级别和现象读未提交:可能产生脏读,读取到未提交的数据 读已提交:可能产生不可重复读取问题,A事务中读取到B事务已提交的数据,导致两次读取数据不一致 可重复读:可能产生幻读问题…

数据采集作业1

作业一 (1)实验内容 o 要求:用requests和BeautifulSoup库方法定向爬取给定网址(http://www.shanghairanking.cn/rankings/bcur/2020 )的数据,屏幕打印爬取的大学排名信息。 o 输出信息: 排名 学校名称 省市 学校类型 总分 1 清华大学 北京 综合 852.5 2 ...... 代码如下…

如何制作精美ppt(1)

现阶段人工智能有生成式人工智能、大语言模型、和ChatGPT,这三者之间为层级关系,生成式人工智能包含文本生成、图像生成、音频生成、视频生成。 现阶段推荐可使用的软件有:海螺AI 文小言(百度) Kimi智能助手(写论文适用) 智谱清言 制作过程要当成一种交流 1 沟通:作为上…

luogu 模拟赛

A.带余除法 我们不难考虑找出 \(q\) 的上下界,不难发现范围是 \([\lfloor\frac{n}{k+1}\rfloor+1,\lfloor\frac{n}{k}\rfloor]\)。当然这个区间可能为空。只需算出区间长度即可。 B.奖牌排序 不难考虑到分别按照三个关键字排序,然后对于每个小朋友找到每个关键字下的排名(同…

vue+wangEditor编辑器,上传图片请求后台接口

来吧,先给大家看一下,是否是你想要的简单轻便编辑器的效果。父组件:<EditorView :content="value" @change="grtUrl"/><script> import EditorView from "@/components/EditorView"; export default {components: {EditorView}},…

汽车开发流程管理工具赋能安全与质量

经纬恒润能够提供Stages的咨询及工程服务能力,同时在ALM实施、ASPICE、功能安全、预期功能安全等有着丰富的咨询经验,帮助客户共同构建一个更高的安全标准和质量水平。 随着数字化、人工智能、自动化系统及物联网技术的迅速发展,工程驱动型企业正面临重大转型挑战,亟…

汽车电控 01

汽车电控1、车体 本身必要的电子设备 如 发动机,底盘,车身电子控制系统等。 2、车载 不是必要的电子设备 如 音响 空调 导航。车用传感器温度传感器压力传感器转速传感器爆震传感器流量传感器移位传感器气体浓度传感器

网络数据请求

测试可跳过域名校验