🎇作业①

🚀(1)作业要求

✒️

(2)代码实现及图片

class WeatherForecast:
    def __init__(self):
        self.headers = {
            "User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 6.0 x64; en-US; rv:1.9pre) Gecko/2008072421 Minefield/3.0.2pre"}
        self.cityCode = {"北京": "101010100", "上海": "101020100", "广州": "101280101", "深圳": "101280601"}

    def forecastCity(self, city):
        if city not in self.cityCode.keys():
            print(city + " code cannot be found")
            return

        url = "http://www.weather.com.cn/weather/" + self.cityCode[city] + ".shtml"
        try:
            req = urllib.request.Request(url, headers=self.headers)
            data = urllib.request.urlopen(req)
            data = data.read()
            dammit = UnicodeDammit(data, ["utf-8", "gbk"])
            data = dammit.unicode_markup
            soup = BeautifulSoup(data, "lxml")
            lis = soup.select("ul[class='t clearfix'] li")
            for li in lis:
                try:
                    date = li.select('h1')[0].text
                    weather = li.select('p[class="wea"]')[0].text
                    temp = li.select('p[class="tem"] span')[0].text + "/" + li.select('p[class="tem"] i')[0].text
                    print(city, date, weather, temp)
                    self.db.insert(city, date, weather, temp)
                except Exception as err:
                    print(err)
        except Exception as err:
            print(err)

    def process(self, cities):
        self.db = WeatherDB()
        self.db.openDB()

        for city in cities:
            self.forecastCity(city)
        self.db.closeDB()

🧾(3)心得体会

将数据采集和数据库操作封装成类,提高了代码的可读性和可维护性。同时,使用函数和类可以方便地复用代码,提高开发效率。

🎊作业②

🕸️(1)作业要求

  • 要求:用 requests 和 BeautifulSoup 库方法定向爬取股票相关信息,并
    存储在数据库中。
  • 候选网站:东方财富网:https://www.eastmoney.com/
    新浪股票:http://finance.sina.com.cn/stock/
  • 技巧:在谷歌浏览器中进入 F12 调试模式进行抓包,查找股票列表加
    载使用的 url,并分析 api 返回的值,并根据所要求的参数可适当更改
    api 的请求参数。根据 URL 可观察请求的参数 f1、f2 可获取不同的数
    值,根据情况可删减请求的参数。
  • 参考链接:https://zhuanlan.zhihu.com/p/50099084
  • 输出信息:
    Gitee 文件夹链接

🎄(2)代码实现及图片

def parse_stocks(html: str) -> List[List[str]]:
    stocks_pattern = re.compile(r'"diff":\[(.*?)\]')
    match = stocks_pattern.search(html)
    if not match:
        return []
    stocks_json = match.group(1)
    stocks_data = eval(stocks_json)
    result = []
    for index, stock in enumerate(stocks_data, start=1):
        result.append([
            index,
            stock["f12"],
            stock["f14"],
            stock["f2"],
            stock["f3"],
            stock["f4"],
            stock["f5"],
            stock["f6"],
            stock["f7"],
            stock["f15"],
            stock["f16"],
            stock["f17"],
            stock["f18"]
        ])
    return result



🔮(3)心得体会

这次作业让我感知到了数据持久化的意义,将爬取的数据存储在数据库中是一种有效的数据持久化方法。这不仅有助于数据的长期保存,还可以方便地进行数据分析和处理。

🪸作业③

🐻‍❄️(1)作业要求

排名 学校 省市 类型 总分
1 清华大学 北京 综合 969.2

🔒(2)代码实现及图片

def extract_data(html):
    patterns = {
        'name': "univNameCn': '(.*?)'",
        'score': "score': (.*?),",
        'province': "province': '(.*?)'",
        'category': "univCategory': '(.*?)'"
    }
    data = {key: re.findall(pattern, html, re.S|re.M) for key, pattern in patterns.items()}
    return data

🗝️(3)心得体会

在本次作业的实际操作中,我意识到了代码的健壮性和错误处理的重要性,尤其是在处理外部数据源时。

posted on 2024-10-17 19:35  pandas2  阅读(13)  评论(0编辑  收藏  举报