🎇作业①
🚀(1)作业要求
- 要求:要求:在中国气象网(http://www.weather.com.cn)给定城市集的7日天气预报,并保存在数据库。
- 输出信息:
- Gitee 文件夹链接
✒️
(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)作业要求
- 要求:爬取中国大学 2021 主榜
(https://www.shanghairanking.cn/rankings/bcur/2021)所有院校信
息,并存储在数据库中,同时将浏览器 F12 调试分析的过程录制 Gif 加
入至博客中。 - 技巧:分析该网站的发包情况,分析获取数据的 api
- 输出信息:
排名 | 学校 | 省市 | 类型 | 总分 |
---|---|---|---|---|
1 | 清华大学 | 北京 | 综合 | 969.2 |
-
gif如下
🔒(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)心得体会
在本次作业的实际操作中,我意识到了代码的健壮性和错误处理的重要性,尤其是在处理外部数据源时。