寒假自学(十)
希望所有温柔又可爱的人最后都能幸福❤
今日总结:
代码量 | 400行 |
---|---|
博客量 | 一篇 |
所学时间 | 6小时左右 |
了解到的知识点 | python爬虫实例、Acwing每日一题 |
明日计划:
早上 | python爬取疫情信息 |
---|---|
下午 | python爬取疫情信息 |
晚上 | Acwing每日一题 |
具体内容:
获取丁香园疫情数据
# 导入模块
import requests
# 发送请求,获取响应
response = requests.get("http://ncov.dxy.cn/ncovh5/view/pneumonia")
# 从响应中,获取数据
# print(response.text)
print(response.content.decode())
Beautiful Soup
是一个可以从HTML或XML文件中提取数据的python库
Beautiful Soup
对象:代表要解析的整个文档树,它支持遍历文档树和搜索文档树中描述的大部分的方法
from bs4 import BeautifulSoup
soup = BeautifulSoup("<html>data</html>","lxml")
print(soup)
指定解析器"lxml"
Beautiful Soup
对象的find
方法
作用:搜索文档树
参数:
name
:标签名attrs
:属性字典recursive
:是否递归循环查找text
:根据文本内容查找
返回:
- 返回第一个元素的对象
import requests
from bs4 import BeautifulSoup
response = requests.get("http://ncov.dxy.cn/ncovh5/view/pneumonia")
home_page = response.content.decode()
# print(home_page)
soup = BeautifulSoup(home_page, 'lxml')
script = soup.find(id='getListByCountryTypeService2true')
text = script.string
print(text)
正则表达式是一种字符串匹配模式
import re
rs = re.findall('abc', 'abc')
rs = re.findall('a.c', 'a%c')
rs = re.findall('a.c', 'abc')
rs = re.findall('a.c', 'a\nc')
rs = re.findall('a\.c', 'a.c')
rs = re.findall('a[bc]d', 'abd')
# 预定义的字符集
rs = re.findall('\d', '123')
rs = re.findall('\w', 'AZ123中文')
# 数量词
rs = re.findall('a\d*', 'a123')
rs = re.findall('a\d+', 'a123')
rs = re.findall('a\d?', 'a123')
rs = re.findall('a\d{2}','a123')
print(rs)
.
匹配除换行符\n
以外的所有字符\d
匹配[0-9]
的数字\w
匹配字母数字_和中文*
前面的一个匹配模式出现0次或多次+
前面的一个匹配模式出现1次或多次?
前面的一个匹配模型出现0或1次
re.findall()
方法
API:.
参数:
- pattern:正则表达式
- string:从那个字符串中查找
- flags:匹配模式
返回:
- 返回string中与pattern匹配的结果列表
import re
rs = re.findall('\d+', 'xiaoson1gyue2')
print(rs)
rs = re.findall('a.bc', 'a\nbc', re.DOTALL)
rs = re.findall('a.bc', 'a\nbc', re.S)
print(rs)
import re
rs = re.findall('\d+', 'xiaoson1gyue2')
print(rs)
rs = re.findall('a.bc', 'a\nbc', re.DOTALL)
rs = re.findall('a.bc', 'a\nbc', re.S)
print(rs)
# findall方法种分组的使用
rs = re.findall('a(.+)bc', 'a\nbc', re.DOTALL)
print(rs)
import re
rs = re.findall(r'a\nbc', 'a\nbc')
print(rs)
import requests
import re
from bs4 import BeautifulSoup
response = requests.get("http://ncov.dxy.cn/ncovh5/view/pneumonia")
home_page = response.content.decode()
# print(home_page)
soup = BeautifulSoup(home_page, 'lxml')
script = soup.find(id='getListByCountryTypeService2true')
text = script.string
# print(text)
# 使用正则表达式提取字符串
json_str = re.findall(r'\[.+\]', text)[0]
print(json_str)
json
模块是python
自带的模块,用于json
与python
数据之间的相互转换
import json
json_str = '''[{"provinceName":"美国", "currentConfirmedCount":1179041,"confirmedCount":1643499},
{"provinceName":"英国", "currentConfirmedCount":222227,"confirmedCount":259559}]'''
rs = json.loads(json_str)
json_str = json.dumps(rs, ensure_ascii=False)
print(json_str)
import requests
import re
import json
from bs4 import BeautifulSoup
response = requests.get("http://ncov.dxy.cn/ncovh5/view/pneumonia")
home_page = response.content.decode()
# print(home_page)
soup = BeautifulSoup(home_page, 'lxml')
script = soup.find(id='getListByCountryTypeService2true')
text = script.string
# print(text)
# 使用正则表达式提取字符串
json_str = re.findall(r'\[.+\]', text)[0]
# print(json_str)
# 把json字符串转换为python类型的数据
last_day_corona_virus = json.loads(json_str)
print(last_day_corona_virus)
https://www.acwing.com/problem/content/758/
因为方向是按照顺序来的,右、下、左、上、右、下...所以直接模拟即可。
#include <bits/stdc++.h>
using namespace std;
int ans[110][110];
int main()
{
int n,m;
cin>>n>>m;
int x = 1 , y = 1 , tt = 0;
for (int i = 1; i <= n*m ; i ++)
{
ans[x][y] = i;
if (tt == 0 && (ans[x][y + 1] != 0 || y == m)) tt = (tt + 1) % 4;
else if (tt == 1 && (ans[x + 1][y] != 0 || x == n)) tt = (tt + 1) % 4;
else if (tt == 2 && (ans[x][y - 1] != 0 || y == 1)) tt = (tt + 1) % 4;
else if (tt == 3 && ans[x - 1][y] != 0) tt = (tt + 1) % 4;
if (tt == 0) y += 1;
else if (tt == 1) x += 1;
else if (tt == 2) y -= 1;
else x -= 1;
}
for (int i = 1; i <= n; i ++)
{
for (int j = 1; j <= m; j ++)
{
cout<<ans[i][j]<<" ";
}
cout<<endl;
}
}