欢迎来到Introzo百科
Introzo百科
2023年数据采集与融合技术实践作业
作业①
爬行大学排名实验
-
实验要求
使用requests和BeautifulSoup库方法定向爬取给定URL(http://www.introzo.com/rankings/bcur/2020)的数据,并将爬取到的大学排名信息打印在屏幕上。输出信息:
排名 学校名称 省市 学校类型 总分 1 清华大学 北京 一般 852.5 2 *** *** *** *** -
具体实现
代码思路:- 导入所需模块:urllib.request用于发送HTTP请求,bs4用于解析网页内容。
- 定义函数get_HTML(url),获取指定URL的网页内容。首先使用 urllib.request.Request() 创建一个请求对象,然后使用 urlopen() 方法发送 HTTP GET 请求并读取响应。最后将响应内容解码为字符串并返回。
- 观察页面标签元素,找到需要的标签(“tbody”、“a”、“td”、“tr”),并使用 .text.strip() 方法获取元素的文本内容。最后,提取的数据作为列表添加到传入列表中。
- 定义函数data_print(list1, num)来打印解析后的数据。使用格式字符串 tplt 定义输出的格式,然后使用 .format() 方法填充格式字符串。
代码显示:
导入urllib.request
导入bs4
从 bs4 导入 BeautifulSoup
#获取网页信息
def get_HTML(url):url="http://www.introzo.com/rankings/bcur/2020"
#访问网站
请求 = urllib.request.Request(url)
数据 = urllib.request.urlopen(req)
#读取信息并转码
数据 = www.introzo.com().decode()
返回数据
#解析网页数据
def data_HTMl(列表,html):
汤 = BeautifulSoup(html,"html.parser")
#使用soup.find("tbody")查找HTML中的元素(大表)
#使用children属性遍历元素的子元素(即表格的行)
对于 soup.find("tbody").children 中的 tr:
#首先使用tr("a")获取该行中的第元素(清华大学名),然后使用tr("td")获取该行中的所有元素。
a = tr("a")
#通过索引访问所需的 元素,并使用.text.strip()方法获取元素的文本内容。 .strip() 方法用于从文本内容中删除前导和尾随空白字符。
tds = tr("td")
#将数据提取为列表 [tds[0].text.strip(), a[0].string.strip(), tds[2].text.strip(), tds[3].text.strip( ),tds[4].text.strip()]添加到传入list列表中
list.append([tds[0].text.strip(), a[0].string.strip(), tds[2].text.strip(),
tds[3].text.strip(), tds[4].text.strip()])
def data_print(list1,num):#定义一个格式字符串tplt,五个占位符
#^:表示居中对齐 10、12:表示项目的宽度为 10 或 12 个字符。 \t:表示添加制表符(Tab) {0}、{1}、{2}、{3}、{4} 表示参数
tplt = "{0:^10}\t{1:^10}\t{2:^12}{3:^10}\t{4:^10}"
print(tplt.format("排名","学校名称","省份","学校类型","总分"))
对于范围内的 i(num):
u = 列表 1[i]
打印(tplt.format(u [0],u [1],u [2],u [3],u [4]))
打印()
print("上面共有记录" + str(num) + "Bar.")
def main():
u信息 = []
url="http://www.introzo.com/rankings/bcur/2020"
html = get_HTML(网址)
data_HTMl(uinfo,html)
数据打印(uinfo,30)
如果 __name__ == '__main__':
主要的()
运行结果:
经验
第一次将理论知识运用到实践中,学会了掌握urllib.request模块和BeautifulSoup模块,了解了格式化输出。
作业②
爬取商城网站“书包”名称和价格的实验
- 实验要求
使用requests和re库方法,针对某商城(自己选择的)设计一个商品比价定向爬虫,抓取该商城,搜索关键词“书包”的页面数据,爬取商品名称和价格。
- 具体实现
代码思路:
- 通过requests库发送GET请求,获取网页内容。使用BeautifulSoup库来解析网页内容。
- 使用 soup.find_all() 方法查找所有产品价格标签 (div) 和产品名称标签 (em)。分别保存在两个变量中:ptl和tlt。
- 通过find()方法提取相关信息。
代码显示:
进口重新
导入请求
从 bs4 导入 BeautifulSoup
#网站地址
url = 'https://www.introzo.com/Search?keyword=%E4%B9%A6%E5%8C%85&enc=utf-8&wq=shu%27bao&pvid=d692d49a9e864669b9fd7961c3e722db'
标题={
'referer': 'https://www.introzo.com/Search?keyword=%E7%AC%94%E8%AE%B0%E6%9C%AC&enc=utf-8&spm=2.1.1',
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, 如 Gecko) Chrome/117.0.0.0 Safari/537.36 Edg/117.0.2045.31',
'cookie': 'shshshfpa=b5f36314-1742-1b85-8dcc-7045fdb3b4b5-1667349047; shshshfp = d547487362f8a6082adcbdf3f8748720; __jdu=364192152;shshshfpx=b5f36314-1742-1b85-8dcc-7045fdb3b4b5-1667349047;区域ID=16; ipLoc-djd=16-1303-0-0; PCSYCityID=CN_350000_350100_0; _pst=jd_72bed13713c96; unick=jd_72bed13713c96;引脚=jd_72bed13713c96; _tp=N5vAmU920Z0wbF6I0MxZgBYl7tjV9aBt19PUT89D7lY%3D; qrsc=3;unpl=JF8EAJdnNSttXUxTAh5SGEEXTlxcW11bGB9WPW9VUA5cSVQDSQUZEhB7XlVdXxRKHx9sZxRUWVNKXA4aBysSEXteU11bD00VB2xXXAQDGhUQR09SWEBJJVlQXl4ITxUBbWQ1ZF5Ye1QEKwAcFxB DXlRaXjhKJwRfVzVWVVBJVQEraystiakJCFdbD08QAyJlAlFdUEhUARgyGiIT; 3AB9D23F7A4B3CSS=jdd03PVSUU54GGAR7IS32R4IMPHTLBYLZSAZD5OE4XPILF3NP7UMO6R5KVGJ23F42ULJUR5M64BDWTJ6R6FW5EINCGAYPCEAAAAMKW2JCNXQAAAAACBN7HRYKVQ76XQX; _gia_d=1;雷神=5D81B6E91112E015439696EBF36804B9BA3575017FF5A1DB5D1C752992A994FF23F66A3491AB073A37FA95F9B6099554E9EC7E9768AA7A511D0E4719926A6C7 DB3B0A0C8AD63D58E7639DB5A0078F36100B40784E68DDB163E845E5F846EDAB899AF970438D505EA47B4F724280BE76ADE7304910DAB139363E26E681C3C9E177F7020 4B047D56A4BA948E7960D9E80FA851F6EFC41547D93646AE0C9A802711;闪存=2_cZgzxUebndUc2BIE6Acj7tuSV1jzlKb2rb_lYf7BNH55y0-MHXWsEK3dDScGBuc9i_lpTHcOsBRvrK4djPmkhazG7-MLGdPivVAoj7_2qzh*; pinId=ekKCf6hCeW6dex9nNIEGKLV9-x-f3wj7; __jdv=76161171|haosou-search|t_262767352_haosousearch|cpc|5512153332_0_46664a2b640941bb9dc9a5b5317c6311|1695280167076; xapieid=jdd03PVSUU54GGAR7IS32R4IMPHTLBYLZSAZD5OE4XPILF3NP7UMO6R5KVGJ23F42ULJUR5M64BDWTJ6R6FW5EINCGAYPCEAAAAMKW2JCNXQAAAAACBN7HRYKVQ76XQX; jsavif=0; j 保存=0; rkv=1.0; shshshsID=95a68db43c9719f530669ed6bebed6c7_3_1695280175229; __jda=122270672.364192152.1693390633.1694944463.1695280146。 4; __jdb=122270672.4.364192152|4.1695280146; __jdc=122270672; IS32R4IMPHTLBYLZSAZD5OE4XPILF3NP7UMO6R5KVGJ23F42ULJUR5M64BDWTJ6R6FW5EINCGAYPCE }
r = requests.get(url, headers=header)
汤 = BeautifulSoup(r.text, "html.parser")
#查找所有产品价格标签
ptl = soup.find_all('div', 'p-价格')
#查找所有产品名称标签
tlt = soup.find_all('div', 'p-name p-name-type-2')
#{:<6s}表示将第一个字符串(序号)左对齐,占用6个字符的宽度。
#{:<40s}表示将第二个字符串(产品名称)左对齐,占用40个字符的宽度。
#{:^10s}表示第三个字符串(价格)居中对齐,占10个字符的宽度。
# print('{:<6s}{:<80s}{:^30s}'.format('序列号', '产品名称', '价格'))
对于范围内的 i(len(tlt)):
#提取产品名称产品标签标题 = tlt[i].find('em').text
价格=“”
如果 len(ptl) > 0:
#提取商品价格![](https://www.introzo.com/blog/3286129/202309/3286129-20230922112629020-380225735.png)
价格标签 = ptl[i].strong.i
如果价格标签:
#提取价格标签内的文本内容,并使用.strip()方法删除前导和尾随空格。
价格 = Price_tag.text.strip()
print(f"产品名称:{标题}")
print(f"产品价格:{price}")
打印(” - - - - - - - - - - - - -”)
# print('{:<6d}{:<80s}{:^10s}'.format(i+1, 标题, 价格))
运行结果:
经验
这个实验和上一个实验的区别在于CSS选择器的使用。通过使用 soup.find_all() 方法结合 CSS 选择器,您可以轻松定位和提取 HTML 文档中的特定标签和内容。这种方式更加灵活高效。
作业③
爬取网站照片实验
- 实验要求
抓取给定网页(https://www.introzo.com/info/1071/4481.htm)或自选网页的所有JPEG、JPG格式文件。
输出信息:将所选网页中的所有 JPEG 和 JPG 文件保存在一个文件夹中。
- 具体实现
代码思路:
- 获取网页内容并使用BeautifulSoup进行解析。
- 创建文件夹来保存图片。
- 查找所有“img”标签,获取图片链接,并根据后缀保存在一起。
代码显示:
导入操作系统
导入请求
从 bs4 导入 BeautifulSoup
从 urllib.parse 导入 urljoin, urlparse
# 定义要抓取的网页URL
url = 'https://www.introzo.com/info/1071/4481.htm'
#发送HTTP GET请求获取网页内容
响应 = requests.get(url)
汤 = BeautifulSoup(response.text, 'html.parser')
#创建一个文件夹来保存图片
folder_path = 'image_folder' # 文件夹路径
如果不是 os.path.exists(folder_path):
os.makedirs(文件夹路径)
# 查找所有img标签
img_tags = soup.find_all('img')
对于 img_tags 中的 img_tag:
# 获取图片链接
img_url = img_tag.get('src')
如果 img_url 和 (img_url.endswith('.jpeg') 或 img_url.endswith('.jpg')):
# 构造图片的完整URL
full_img_url = urljoin(url, img_url)
#提取图像文件名
img_filename = os.path.basename(urlparse(full_img_url).path)
# 拼接图片保存路径
save_path = os.path.join(文件夹路径, img_文件名)
#发送HTTP GET请求获取图片内容img_response = requests.get(full_img_url)
# 将图像保存到本地
打开(save_path,'wb')作为f:
f.write(img_response.content)
print(f'保存图像:{img_filename}')
print('所有 JPEG 和 JPG 文件已保存在该文件夹中。')
运行结果:
经验
这次主要是URL处理。例如,使用urljoin()将相对URL转换为绝对URL,使用urlparse()提取URL的各个部分,然后根据后缀名拼接图像路径。这部分知识点是我需要加强学习的地方。
相关文章
-
10-03
android 表格布局属性
-
10-03
android表格布局介绍,TableLayout
-
10-03
html表格在页面上的位置,css表格布局-dis
-
10-03
php是一种编程语言吗?
-
10-03
如何下载wampserver
-
10-03
如何在php中启动exe文件
-
10-03
本田宣布2025年拆除东京总部大楼 2030年完成
-
10-03
曝三菱汽车已决定全面放弃中国生产 日系车开始出局?
-
10-03
问界M9 35万起售?内部人士:纯属无稽之谈!
-
10-03
2023年数据采集与融合技术实践作业1
-
10-03
自我介绍
-
10-03
2023年数据采集与融合技术实践作业
-
10-03
MySQL判断空值的方法是NULL和(mysql中
-
10-03
Linux网卡验证解决方案:turn it off
-
10-03
Linux下如何使用C语言实现文件复制操作(lin
-
10-03
Linux系统下的游戏:优质选择,更好体验(Lin
-
10-03
回答Linux时区问题:00 00代表哪个时区?
-
10-03
Linux下如何限制ssh登录? (Linux限制
-
10-03
jQuery实现手机下拉显示新内容动画反弹
-
10-03
jQuery实时统计输入框的字数及限制
- 最近发表
-