本周主要内容就是爬虫
以例题来回顾复习知识点再合适不过
html常见标签
<a>链接标签</a>
<p>这行的文字内容</p>
<h1>一级标题</h1>
<u>下划线</u>
<s>删除线</s>
<i>我倒了</i>
<b>变粗!</b>
<img/图片连接> 插入图片
<hr> 水平线
<br> 换行符
<img src=\'图片标签\'/>
<ul>
<li>这是</li>
<li>列表</li>
<li>标签</li>
</ul>
<!--下面是表格标签-->
<table>
<thead>
<tr>
<th>这里是</th>
<th>表头</th>
</tr>
</thead>
<!--下面是表格标签-->
<tbody>
<tr>
<td>这里是</td>
<td>表单部分</td>
</tr>
</tbody>
</table>
<!--表单标签-->
<form>
<input type=\'\'> <!--获取用户输入 type控制类型-->
</form>
标签重要属性
有id属性 相当于标签的身份证
有class属性 相当于标签的分类
块级标签比如<div></div>里可以无限嵌套
正则表达式
字符组:
[0-9] # 匹配数字
[a-z] # 匹配小写英文字母
[0-9a-zA-Z] # 匹配数字和英文字母
符号:
. # 匹配任意字符一次
^ # 匹配开头
$ # 匹配结尾
\d # 匹配数字
a|b # 匹配a或b
[...] # 匹配中括号内字符
[^...] # 匹配除中括号内字符外全部字符
量词:
* # 重复0或多次
+ # 重复1或多次
? # 重复0或1次
{n} # 重复n次
{n,} # 重复n次或多次
{n,m} # 重复n次到m次
\'\'\'默认贪婪匹配 后面加?变成最短匹配\'\'\'
re模块
import re
res = re.findall(\'正则语句\',待匹配文本) # 返回一个匹配到所有结果的列表
res1 = re.finditer(\'正则语句\',待匹配文本) # 返回一个不占内存的迭代器
for i in res1:
print(i) # 只有主动索要才会产生数据
print(i.group())
res3 = re.search(\'正则语句\',待匹配文本) # 匹配到一个符合条件的就结束
res4 = re.match(\'正则语句\',待匹配文本) # 从头开始匹配 头部不符合就停
cookie
cookie: 浏览器记下访问网页时候的K:V键值对数据下次访问的时候直接用
eg: 记录用户名密码下次登陆就不用再输入
session: 浏览器在收到用户名密码后返回一段随机字符 这样就防止密码泄露
同时由于字符串要通过K:V键值对记录所以还是要通过cookie工作
requests模块和别的放入例题
爬天气数据
import requests # 1.导入模块
import json
month_like = input(\'请输入查询天气的月份\') # 找规律找到网站之间每月天气的规律
url = \'http://tianqi.2345.com/Pc/GetHistory?areaInfo%5BareaId%5D=54511&areaInfo%5BareaType%5D=2&date%5Byear%5D=2021&date%5Bmonth%5D=\'
url = url + month_like
res = requests.get(url)
weather = res.json()
print(weather.get(\'data\'))
百度翻译
import requests
url = \'https://fanyi.baidu.com/sug\'
word = input(\'请输入你要查询的单词\')
res = requests.post(url,
data={\'kw\': word},
headers={
\'User-Agent\': \'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36\'})
trans_list = res.json().get(\'data\')
print(trans_list)
药品许可证
import requests
import json
import os
import time
if not os.path.exists(r\'company_info\'):
os.mkdir(r\'company_info\')
url1 = \'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsList\'
for p in range(1, 300):
res1 = requests.post(url1,
headers={
\'User-Agent\': \'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36\'},
data={
\'on\': \'true\',
\'page\': p,
\'pageSize\': 15,
\'productName\': \'\',
\'conditionType\': 1,
\'applyname\': \'\',
\'applysn\': \'\'
}
)
company_list = res1.json().get(\'list\')
for i in company_list:
id = i.get(\'ID\')
url2 = \'http://scxk.nmpa.gov.cn:81/xk/itownet/portalAction.do?method=getXkzsById\'
res2 = requests.post(url2,
headers={
\'User-Agent\': \'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36\'},
data={\'id\': id}
)
company_detail = res2.json()
time.sleep(1)
name = company_detail.get(\'epsName\')
info_add = os.path.join(r\'company_info\', name)
with open(info_add, \'w\', encoding=\'utf8\') as f:
json.dump(company_detail, f)
红牛正则解决
import requests
import re
res = requests.get(\'http://www.redbull.com.cn/about/branch\')
info = res.text
name = re.findall("<h2>(.*?)</h2>", info)
add = re.findall("<p class=\'mapIco\'>(.*?)</p>", info)
mail = re.findall("<p class=\'mailIco\'>(.*?)</p>", info)
tele = re.findall("<p class=\'telIco\'>(.*?)</p>", info)
\'\'\'通过正则拿到标签里数据\'\'\'
for i in range(len(name)):
print("""
名字:%s
地址:%s
邮编:%s
电话:%s
""" % (name[i], add[i], mail[i], tele[i]))
搞笑图片
import requests
from bs4 import BeautifulSoup
import os
import time
if not os.path.exists(r\'funny_pic\'):
os.mkdir(r\'funny_pic\')
res = requests.get(\'https://www.qiushibaike.com/imgrank/\',
headers={
\'User-Agent\': \'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36\'})
soup = BeautifulSoup(res.text, \'lxml\')
tag_img = soup.select(\'.illustration\')
# print(tag_img)
for i in tag_img:
img_add = i.attrs.get(\'src\')
name = i.attrs.get(\'alt\')
# print(name)
img = requests.get(\'https:\' + img_add,
headers={
\'User-Agent\': \'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36\'})
img_data = img.content
pic_add = os.path.join(r\'funny_pic\', name)
# print(pic_add)
with open(pic_add, \'wb\') as f:
f.write(img_data)