# 数据采集第二次大作业

## 作业①:

### 要求：在中国气象网（http://www.weather.com.cn）给定城市集的7日天气预报，并保存在数据库。

#### 实验步骤：

##### 3、写出正则表达式

date = re.findall(r'<h1>(.*?)</h1>', req.text）#日期
message = re.findall(r'<p title="(.*?)"', req.text)#天气信息
temp1 = re.findall(r'<span>(\d+)</span>', req.text) temp2 = re.findall(r'<i>(.*?)</i>', req.text)#气温

##### 4、存储到数据库

class WeatherDB:
def openDB(self):
self.con=sqlite3.connect("weathers.db")
self.cursor=self.con.cursor()
try:
self.cursor.execute("create table weathers (wCity varchar(16),wDate varchar(16),wWeather varchar(64),wTemp varchar(32),constraint pk_weather primary key (wCity,wDate))")
except:
self.cursor.execute("delete from weathers")

def closeDB(self):
self.con.commit()
self.con.close()

def insert(self, city, date, weather, temp):
try:
self.cursor.execute("insert into weathers (wCity,wDate,wWeather,wTemp) values (?,?,?,?)",
(city, date, weather, temp))
except Exception as err:
print(err)

def show(self):
self.cursor.execute("select * from weathers")
rows = self.cursor.fetchall()
print("%-16s%-16s%-32s%-16s" % ("city", "date", "weather", "temp"))
for row in rows:
print("%-16s%-16s%-32s%-16s" % (row[0], row[1], row[2], row[3]))


### 心得体会：

1、更好地掌握了正则表达式的使用
2、学会该如何将数据存储到数据库，并查看数据库内容

## 作业②

### 要求：用requests和BeautifulSoup库方法定向爬取股票相关信息。

#### 实验步骤：

##### 1、F12观察网络状态，找到所需信息

f12/f14/f2/f3/f4/f5/f6/f7/f15/f16/f17/f18就是我们需要的信息

##### 2、获取单个页面数据

def getOnePageStock(cmd,page):
data = getHtml(cmd,page)
#print(data)
db = MoneyDB()
db.openDB()
datas = data[0].split('},')
infos=[]
for info in datas:
if info[-1]!='}':
info=info+'}'
stocks = []
for stock in infos:
stocks.append([stock['f12'],stock['f14'],stock['f2'],stock['f3'],stock['f4'],stock['f5'],stock['f6'],stock['f7'],stock['f15'],stock['f16'],stock['f17'],stock['f18']])
db.insert(stock['f12'],stock['f14'],stock['f2'],stock['f3'],stock['f4'],stock['f5'],stock['f6'],stock['f7'],stock['f15'],stock['f16'],stock['f17'],stock['f18'])
#print(stocks)
db.closeDB()
return stocks

##### 3、获取全部数据

cmd = {
"上证指数":"C.1",
"深圳指数":"C.5",
"沪深A股":"C._A",
"上证A股":"C.2",
"深圳A股":"C._SZAME",
"新股":"C.BK05011",
"中小板":"C.13",
"创业板":"C.80"
}
for i in cmd.keys():
page = 1
stocks = getOnePageStock(cmd[i],page)
#自动爬取多页，并在结束时停止
while True:
page +=1
if page>8:
break
if getHtml(cmd[i],page)!= getHtml(cmd[i],page-1):
stocks.extend(getOnePageStock(cmd[i],page))
print(i+"已加载第"+str(page)+"页")
else:
break
df = pd.DataFrame(stocks)


### 心得体会：

1、进一步了解了不同网站该如何爬取信息数据
2、巩固了翻页处理

## 作业③:

### 所有院校信息，并存储在数据库中，同时将浏览器F12调试分析的过程录制Gif加入至博客中。

#### 实验步骤：

##### 2、寻找正确url

url = "https://www.shanghairanking.cn/_nuxt/static/1632381606/rankings/bcur/2021/payload.js"

##### 3、编写正则表达式

name = re.findall(r'univNameCn:"(.*?)"', Data)#学校名称
score = re.findall(r'score:(.*?),', Data)#总分

### 心得体会：

1、运用js抓包，相比于之前的抓包方式更简洁，不需要额外进行翻页处理

#### 码云链接：https://gitee.com/huang-weiting/data-acquisition/blob/master/作业2/school.py

posted @ 2021-10-24 15:55  Brasing  阅读(9)  评论(0编辑  收藏  举报