数据采集与融合技术作业1

学号姓名 102202111 刘哲睿
这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/2024DataCollectionandFusiontechnology/homework/13286
这个作业的目标 用requests和BeautifulSoup库方法定向爬取各网页内容
实验一仓库地址 https://gitee.com/qweasdzxc123-456/crawl_project/tree/master/数据采集实验1

作业1

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

代码:

# 使用 BeautifulSoup 解析 HTML
soup = BeautifulSoup(html_content, 'html.parser')

# 查找包含排名信息的表格
ranking_table = soup.find('table', {'class': 'rk-table'})

# 定义一个正则表达式来匹配中文字符(去掉英文名)
chinese_pattern = re.compile(r"[\u4e00-\u9fff]+")

# 遍历表格行,提取排名信息
if ranking_table:
    rows = ranking_table.find_all('tr')
    
    # 输出表头
    print(f"{'排名':<6} {'学校名称':<20} {'省市':<10} {'学校类型':<10} {'总分':<6}")
    
    # 遍历每一行,提取信息
    for row in rows[1:]:  # 跳过表头
        cols = row.find_all('td')
        if len(cols) >= 5:  # 确保有足够的列数据
            rank = cols[0].text.strip()

            # 只提取中文学校名称,使用正则表达式去除英文部分
            raw_name = cols[1].text.strip()
            name = ''.join(chinese_pattern.findall(raw_name))  # 只保留中文部分
            name = name.replace('双一流', '')  # 去除"双一流"信息
            
            # 去除双一流/985/211信息
            raw_location = cols[2].text.strip()
            location = raw_location.split('/')[0].strip()  # 提取省市,去掉后面的内容
            
            school_type = cols[3].text.strip()
            score = cols[4].text.strip()

输出结果:

2)心得体会

这个任务之前在老师布置的作业里已经完成过了

作业2

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

代码:


输出结果:

2)心得体会

这个任务之前在老师布置的作业里也已经完成过了

作业3

1)爬取一个给定网页( https://news.fzu.edu.cn/yxfd.htm) 的所有JPEG和JPG格式文件

代码:

# 禁用不安全请求警告
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
# 目标网页 URL
url = "http://news.fzu.edu.cn/yxfd.htm"  # 尝试使用 http
# 保存图片的文件夹路径
save_folder = r'C:\Users\刘哲睿\Desktop\Typora\数据采集实验1\images'
# 如果文件夹不存在则创建
if not os.path.exists(save_folder):
    os.makedirs(save_folder)
# 自定义请求头,伪装成浏览器
headers = {
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.82 Safari/537.36'
}
# 创建一个会话对象
session = requests.Session()
# 发送请求获取网页内容,禁用 SSL 证书验证
try:
    response = session.get(url, headers=headers, verify=False)
    response.encoding = 'utf-8'  # 设置编码
    html_content = response.text
except requests.exceptions.ConnectionError as e:
    print(f"连接失败: {e}")
    exit()

# 使用 BeautifulSoup 解析 HTML
soup = BeautifulSoup(html_content, 'html.parser')

# 定义图片格式的正则表达式,匹配 .jpg 和 .jpeg 文件
img_pattern = re.compile(r'.*\.(jpg|jpeg)$', re.IGNORECASE)

# 查找所有图片链接
img_links = []

# 查找所有 <img> 标签
for img in soup.find_all('img'):
    img_url = img.get('src') or img.get('data-src')  # 获取图片链接
    if img_url and img_pattern.search(img_url):
        # 如果图片链接是相对路径,转换为绝对路径
        if img_url.startswith('/'):
            img_url = "http://news.fzu.edu.cn" + img_url  # 修改为 http
        img_links.append(img_url)<details>

输出结果:


2)心得体会

我们需要查看网页的HTML源码,定位图片的位置。通过分析标签属性,如 class 和 id,可以较为准确地编写正则表达式进行匹配。使用BeautifulSoup的img_pattern = re.compile(r'.*.(jpg|jpeg)$', re.IGNORECASE)可高效筛选出以.jpg和jpeg结尾的图片链接,基于标签属性和条件筛选能准确定位目标图片元素,提高爬取准确性和效率。

posted @ 2024-10-15 16:14  Con1427  阅读(14)  评论(0编辑  收藏  举报