第六周内容回顾
本周主要内容就是爬虫
以例题来回顾复习知识点再合适不过
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)