首页 > 其他分享 >数据采集实验一

数据采集实验一

时间:2023-09-22 09:55:56浏览次数:34  
标签:url request urllib 采集 实验 print import 数据 page

实验一

作业①

(1)实验1-1
from bs4 import BeautifulSoup
from urllib import request
import urllib

url = "http://www.shanghairanking.cn/rankings/bcur/2020 "

res = urllib.request.urlopen(url)
data = res.read().decode()  #爬取网页数据
soup = BeautifulSoup(data,"lxml")
i = 1
for tr in soup.find('tbody').children:  #读取前17个大学的信息
    if(i>17):
        break
    else:
        a = tr('a')
        tds = tr('td')
        print("排名:{:<5} 学校名称:{:<10} 省市:{:<10} 学校类型:{:<5} 总分:{:<8}".format(tds[0].text.strip(), a[0].string.strip(), tds[2].text.strip(),
                          tds[3].text.strip(), tds[4].text.strip()))
    i = i + 1
(2)心得体会

通过BeautifulSoup和request能够对网站的数据进行提取,便于我们得到所需的数据,

作业②

(1)实验1-2利用BeautifulSoup对当当网的书包数据进行提取
from bs4 import BeautifulSoup
import urllib.parse
import urllib.request

url = 'http://search.dangdang.com/?key=%CA%E9%B0%FC&act=input&'

n = int(input("请输入想要爬取的起始页面:"))
m = int(input("请输入想要爬取的最后页面:"))
#输入想要查询的页面
for i in range(n,m+1):
    print("--------------正在爬取第{}页面的书包数据------------------".format(i))
    page = {
        "page_index": i
    }
    page = urllib.parse.urlencode(page)   #实现翻页
    url = url + page
    res = urllib.request.urlopen(url)
    data = res.read().decode('gb2312')
    # print(data)
    soup = BeautifulSoup(data, 'lxml')
    # print(soup)
    goods = soup.select('p[class = "name"] > a[title]')  #寻找商品的名字
    price = soup.select('span[class="price_n"]')         #寻找商品的价格
    for i in range(60):
        print(goods[i].text + ":" + "\t" + price[i].text)


(2)实验1-2利用requrest和re对当当网的书包数据进行提取
	import re
	import urllib.parse
	import urllib.request
	url = 'http://search.dangdang.com/?key=%CA%E9%B0%FC&act=input&'
	start = int(input("请输入要爬取的初始页面:"))
	end = int(input("请输入要爬取的最终页面:"))
	cnt = 1   #用于记录输出得商品数
	for i in range(start,end+1):

		page = {

			'page_index': i
		}
		page = urllib.parse.urlencode(page)
		url = url + page                   #实现翻页技术
		res = urllib.request.urlopen(url)
		data = res.read().decode("gb2312")
		#print(data)
		price = re.findall('<span class="price_n">&yen;(.*?)</', data)#查询商品价格,输出类型为list
		goods = re.findall('<a title=" (.*?)" href="//product.dangdang.com/', data)    #查询商品名称,输出类型为list
		#print(goods[0], '\n', goods[1])
		for j in range(len(price)):
			print(cnt,price[j],goods[2*j+1])
			cnt += 1
(3)心得体会

在搜索的角度上BeautifulSoup需要寻找标签,而re库可以比较快的寻找到目标数据,二者各有优点。

作业③

(1)实验1-3
from bs4 import BeautifulSoup
import urllib.request
import urllib.parse
import requests
url = "https://news.fzu.edu.cn/info/1011/31611.htm"   #网站地址
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.36'
}
request = urllib.request.Request(url=url,headers=headers)
response = urllib.request.urlopen(request)
data = response.read().decode()    #读取网站数据
#print(data)
soup = BeautifulSoup(data,'lxml')
#print(soup)
pic_jpg = soup.find_all('p',class_='vsbcontent_img')   #寻找图片所在的位置
i = 0
pic_list =[]
for i in range(len(pic_jpg)):   #将图片地址存到列表当中
    if(i%2 != 0):
        pic =pic_jpg[i]
        img = pic.find('img')['src']
        img = "https://news.fzu.edu.cn" + img
        pic_list.append(img)
        print(img)
for i in range(len(pic_list)):
    picture = requests.get(pic_list[i])
    with open(f"D:\python\exercise\数据采集\实验1-3\images{i + 1}.jpg", "wb") as f:
        f.write(picture.content)    #下载图片
        print(f"第{i + 1}副图片下载完毕")
(2)心得体会

在下载图片的时候会比较慢,网页上的图片只有两张,但是搜寻出来的数据却存在两个None空值,只好通过if语句将其跳过

标签:url,request,urllib,采集,实验,print,import,数据,page
From: https://www.cnblogs.com/chenhhhh/p/17721617.html

相关文章

  • MySQL数据库管理
    目录数据库的基本概念数据库的发展主流的数据库介绍MySQL安装方法操作MySQL查看数据库结构SQL语句创建及删除数据库和表修改表名和表结构数据表高级操作数据库用户管理数据库用户授权数据库的基本概念数据描述事物的符号记录包括数字,文字、图形、图像、声音、档案记录等以......
  • 一个监控数据的思考-sockets_used
    一个监控数据的思考-sockets_used背景最近跟踪一个项目问题.Grafana的监控了里面有一个tcp的使用监控CurrEstab的数据量是:700-2000左右但是同时有一个非常大的:Sockets_used的数据数据量一般是CurrEstab的十倍以上.大家看起来感觉有点模糊,自己之前看过不少tcp的......
  • 多行多列N组数据,快速转换到一行多列显示!
    1职场实例小伙伴们大家好,今天我们来解决一个后台粉丝提问的有趣提问:如何将多行多列N组数据,快速转换到一行多列显示?这个问题的难点就在于数据量非常大。如果在数据量少的情况下,我们完全可以通过复制粘贴法简单的应付此工作;但是在数据量大情况下就不妙了,通过复制粘贴法会浪费大量的时......
  • Python - 读取CSV文件发现有重复数据,如何清洗以及保存为CSV文件,这里有完整的过程!!!!
    语言:Python功能:1、清洗CSV文件中重复数据。2、保存为CSV文件大体流程:1、首先观察CSV文件中的数据布局格式如何?2、通过csv包读取数据。并根据规则使用continue,来跳过本次循环,并将所需数据保存到列表A中,当列表A中的数据变成len(列表A)==2时,将此数据保存到列......
  • 多源异构数据信息的融合方式3 - 数据层/特征层融合
    一、数据层融合通过统一的数据格式来描述各个异构数据源。采用中间件整合的形式,利用轻量级的JSON来描述格式进行数据格式转换,以消除底层数据源之间的异构问题,实现多个数据源的统一访问。多源异构数据融合的关键在于语法异构和语义异构,本文使用JSONSchema来对数据源进行映射,......
  • 数据结构之 - 深入了解栈数据结构
    栈(Stack)是计算机科学中常见且重要的数据结构,它遵循后进先出(LIFO)的原则。在本文中,我们将深入探讨栈的特性、操作以及应用场景,旨在帮助你全面了解这一关键的数据结构。1.栈的基本原理栈是一种基于先进后出(LIFO)原则的抽象数据类型。它可以看作是一种限制性的线性表,只允许在表的一端进......
  • java--内存与数据结构
    JVM内存划分 栈一种数据结构特点:先进后出(FILO)入栈:把元素放到栈里栈顶:栈中的第一个元素栈底:栈中的最后一个元素出栈:把元素从栈里移除   基本数据类型–值传递 引用类型–地址传递 堆数组在堆中存储 若堆中的内存空间没有被引用的时候,就会变成垃圾,等着......
  • openGauss学习笔记-76 openGauss 数据库管理-内存优化表MOT管理-内存表特性-MOT简介
    openGauss学习笔记-76openGauss数据库管理-内存优化表MOT管理-内存表特性-MOT简介本节介绍了openGauss内存优化表(Memory-OptimizedTable,MOT)的简介。76MOT简介openGauss引入了MOT存储引擎,它是一种事务性行存储,针对多核和大内存服务器进行了优化。MOT是openGauss数据库最先进......
  • Python 内置数据类型详解
    内置数据类型在编程中,数据类型是一个重要的概念。变量可以存储不同类型的数据,不同类型可以执行不同的操作。Python默认内置了以下这些数据类型,分为以下几类:文本类型:str数值类型:int、float、complex序列类型:list、tuple、range映射类型:dict集合类型:set、frozenset布尔类型......
  • 9.21日数据结构练习题
    用栈操作去判断一个字符串是不是回文数列1#include<iostream>2#defineMAXSIZE1003usingnamespacestd;4//定义一个栈的结构体5//包含顶指针,尾指针,长度6typedefstruct{7char*base;8char*top;9intstacksize;10}SqStack;11//创......