数据采集第一次作业

作业1

核心代码与运行结果
url='http://www.shanghairanking.cn/rankings/bcur/2020'

response = urllib.request.urlopen(url)
if response.getcode() == 200:
    html = response.read().decode('utf-8')
    #解析网页
    soup = BeautifulSoup(html, 'lxml')
    #找到排名表
    tables = soup.find_all('div', attrs={'class':'rk-table-box'})
    #找到行标签
    rows=tables[0].find_all('tr')
    print('排名\t学校名称\t省市\t学校类型\t总分')
    for row in rows[1:]:
        #找到行内对应的块,获取排名
        print(row.find('div', attrs={'class':'ranking'}).text.strip(),end='\t')
        #找到行内对应的块,获取名称
        print(row.find('span',attrs={'class':'name-cn'}).text.strip(),end='\t')
        for attr in  row.find_all("td")[-4:-1]:
            print(attr.text.strip(),end='\t')
        print()

image
这里打开链接发现第一页没做什么处理,直接request+bs4,通过浏览器调试快速找到排名对应的块和表格位置用bs4提取即可。
image

心得

这里发现用浏览器定位目标位置十分方便,不过这里翻页是用js实现的,request就无能为力了。大概流程就是先requset拿到静态网页,用re或bs4解析一下。然后找一下目标所在的块,一般相同内容对应的class都一样,后续处理也方便。

作业2

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

import requests
import re
url='https://search.bl.com/k-%25E4%25B9%25A6%25E5%258C%2585.html?bl_ad=P668822_-_%u4E66%u5305_-_5'

headers={
    'user-agent':"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 Edg/141.0.0.0"

}
response = requests.get(url,headers=headers)
response.encoding='utf-8'
html = response.text
#print(html)
#缓存到本地
with open('index.html','w',encoding='utf-8') as f:
    f.write(html)

# with open('index.html','r',encoding='utf-8') as f:
#     html = f.read()
#正则表达式模板
#找到li标签
li_pattern = re.compile(r'(<li class="on-show" \b[^>]*>.*?</li>)', re.DOTALL)
#找到价格对应的块
money_pattern=re.compile(r'<div class="money-fl">¥([0-9.]+)</div>')
#找到名称,这里多个标签包含了名称信息,选了a标签
title_pattern=re.compile(r'<a target="_blank" title=(".*") href=')
for a in li_pattern.findall(html):
    # print(a)
    print(title_pattern.findall(a)[0],end='\t')
    print(money_pattern.findall(a)[0])

image

心得

步骤大差不差,主要是网站不好找,这里找了个小网站爬,不过也只能能获取部分信息,找了几个购物网站都是动态网页,可以用Selenium等自动化包爬。

作业3

核心代码与运行结果
import requests
from bs4 import BeautifulSoup

url='https://news.fzu.edu.cn/yxfd.htm'
res = requests.get(url)
res.encoding='utf-8'
html = res.text
links=[]
soup = BeautifulSoup(html, 'lxml')
#去img标签里找图片地址并拼接
for img in soup.find_all('img'):
    link=img.get('src')
    print(link)
    links.append('https://news.fzu.edu.cn/'+link)

#下载
for i, url in enumerate(links):
    print(f"\n进度: {i + 1}/{len(links)} - 正在下载: {url}")
    response = requests.get(url,  stream=True, timeout=30)
    response.raise_for_status()  # 检查请求是否成功
    try:
        with open('./pics/'+url.split('/')[-1], 'wb') as f:
            for chunk in response.iter_content(chunk_size=8192):
                if chunk:
                    f.write(chunk)
            print(f"✅ 下载成功 ")
    except Exception as e:
        print(e)

image

心得

福大的网站还是友好,流程也差不多。翻页也设计在url里,就没什么问题了。这里找图片比较方便直接去img标签里找。拼接的话这里通过浏览器发现图片的链接为:'https://news.fzu.edu.cn/'+link,基本没什么问题了。

gitee地址

https://gitee.com/wsxxs233/data-collection

posted @ 2025-10-16 23:58  XYC_666  阅读(99)  评论(0)    收藏  举报