2023数据采集与融合技术作业一

作业①:

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

排名 学校名称 省市 学校类型 总分
1 清华大学 北京 综合 852.5
2......
代码
#爬取学校排名信息

import requests
from bs4 import BeautifulSoup
url=r'http://www.shanghairanking.cn/rankings/bcur/2020'
try:
    req = requests.get(url)
    req.raise_for_status()
    req.encoding=req.apparent_encoding
except:
    print("error im request")

data=req.text
# print(data)
soup=BeautifulSoup(data,'lxml')
# thead_tag=soup.find('thead')
# for item in thead_tag:
#
tbody_tag=soup.find('tbody')
school_tags=tbody_tag.find_all('tr')
for school_tag in school_tags:
    i=0
    for value_tag in school_tag.find_all('td'):
        if i==0:
            rank=value_tag.find('div').text
        if i==1:
            my_name=value_tag.find('a',attrs={'class':'name-cn'}).text
        if i==2:
            city=value_tag.text
        if i==3:
            type_school=value_tag.text
        if i==4:
            point=value_tag.text
        i+=1
    print(rank.strip(), my_name.strip(), city.strip(), type_school.strip(), point.strip(), sep='\t')

2)、心得体会

通过这个实验我初步练习了beatifulsoup的find_all功能,学会了request请求页面信息和解析页面信息

作业②:

1)

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

序号 价格 商品名
1 65.00 xxx
2......
代码
#爬取商城价格信息

import requests
import re

#request获取网页数据
url=r'http://search.dangdang.com/?key=%CA%E9%B0%FC&act=input'
try:
    req = requests.get(url)
    req.raise_for_status()
    req.encoding=req.apparent_encoding
except:
    print("error im request")

data=req.text
#获取商品信息部分数据(在<ul></ul>)里
match=re.search('''<ul class="bigimg cloth_shoplist" id="component_59">.*</ul''',data)
#start,end分别匹配每一件商品信息的开头和结尾(单件商品信息在<li></li>里)
data=data[match.start():match.end()]
start=re.search('<li',data)
end=re.search('</li',data)
i=0
while end!=None:
    #获取单件商品的信息my_data
    my_data=data[start.end():end.start()]
    #获取商品的price
    price_sta_match=re.search('<span class="price_n">',my_data)
    price_end_match=re.search('</span>',my_data)
    price=my_data[price_sta_match.end()+5:price_end_match.start()]
    #获取商品name
    title_match=re.search('title="',my_data)
    ddclick_match=re.search('ddclick',my_data)
    name=my_data[title_match.end():ddclick_match.start()].strip()
    name=name[:-1]
    #输出编号,price,name
    print(i,price,name,sep='\t')
    # 更新遍历的数据(data-my_data)
    data=data[end.end():]
    #找下一个商品信息
    start = re.search('<li', data)
    end = re.search('</li', data)
    i+=1

2)心得体会

这个实验练习了re库和request的使用,其中我想使用更为简洁的表达式,但是总是不成功各种问题,只好使用比较笨的方法,分成两部分查找,正则表达式掌握的好感觉可以事半功倍,大大提高解析html文档的水平

作业③:

o 要求:爬取一个给定网页( https://xcb.fzu.edu.cn/info/1071/4481.htm)或者自选网页的所有JPEG和JPG格式文件
o 输出信息:将自选网页内的所有JPEG和JPG文件保存在一个文件夹中
代码

#下载图片

import requests
from bs4 import BeautifulSoup
import os.path as path
import re

#根据img_src把对应图片下载到D:\作业截图\数据采集融合\test1_image文件夹
def downlord(url):
    global cnt
    img_path=path.join(my_path,str(cnt))
    index=re.search('\?',url).start()
    #ext为对应扩展名jpg,jpeg
    ext=url[index+3:]
    img_path=img_path + ext
    if not path.exists(img_path):
        try:
            req = requests.get(url)
            req.raise_for_status()
            data = req.content
        except:
            print('error in download image')
        with open(img_path, 'wb') as file:
            file.write(data)
        print('suc download'+img_path)
        cnt += 1
    else:
        print(img_path+'already exist')

if '__main__'==__name__:
    #获取给定网站html信息data
    url = r'https://xcb.fzu.edu.cn/info/1071/4481.htm'
    try:
        req = requests.get(url)
        req.raise_for_status()
        req.encoding = req.apparent_encoding
    except:
        print("error im request")
    data = req.text
    #存储路径my_path和图片名cnt
    my_path = r'D:\作业截图\数据采集融合\test1_image'
    cnt=0
    #提取img标签的src属性,并且下载
    soup = BeautifulSoup(data, 'lxml')
    img_tags = soup.find_all('img')
    for img_tag in img_tags:
        src = img_tag['src']
        downlord(r'https://xcb.fzu.edu.cn'+src)

2)心得体会

这个实验主要是练习了下下载二进制文件,req.content获得数据

posted @ 2023-09-21 22:24  菜鸟bird  阅读(41)  评论(0编辑  收藏  举报