导图社区 python爬虫
python爬虫的思维导图,内容有 urllib、BeautifulSoup、正则表达式、保存数据、Flask,感兴趣快来看看。
编辑于2023-04-07 17:52:49 江苏省python爬虫
urllib
导入
import urllib.request
获取
urllib.request.urlopen
GET方式
response = urllib.request.urlopen(‘网页链接’)
默认为GET方法
POST方式
封装传入的信息
data = bytes(urllib.parse.urlencode({“token”:”mytoken”},encoding=“utf-8”)
请求
response.urlopen(“网页链接”,data=data)
urllib.request.Request
构建请求对象
request = urllib.request.Request(url,data=data,headers=headers,method=“POST”)
请求
response = urllib.request.urlopen(request)
读取
html信息
response.read().decode(‘utf-8’)
decode 用utf-8解码
header信息
response.getheader(“header的key”)
状态码
response.status
BeautifulSoup
导入
from bs4 import BeautifulSoup
初始化
bs = BeautifulSoup(html,”html.parser”)
根据标签获取 以</head>标签为例
bs.head 标签及其内容(只会获取第一个)
bs.head.string 获取内容
bs.head.attars 获取属性map
文档的遍历
bs.head.contents[1]
获取head标签的第1个子标签
文档的搜索
字符串过滤
bs.find_all(“a”)
获取所有a标签,返回列表
正则表达式搜索
bs.find_all(re.compile(“a”))
a可替换为正则表达式
根据函数要求来搜索
kwargs根据参数搜索
bs.find_all(id=“head”)
属性map中id=“head”的标签及其内容
bs.find_all(class_=True)
属性map中有class则返回
text参数搜索
bs.find_all(text=“ccatom”)
返回含有ccatom的标签内容
bs.find_all(text=[“a”,”b”,”c”])
返回含有列表字符串的标签内容
bs.find_all(text=re.compile(“正则表达式”))
正则表达式方式
limit参数
bs.find_all(“a”,limit=3)
只返回结果列表中的前三个
css选择器
bs.select(‘head’)
通过标签来查找
bs.select(“.mnav”)
通过类名来查找 class=“mnav”
bs.select(“#u1”)
通过id来查找 id=“u1”
bs.select(“a[class=‘bri’]”)
通过属性来查找 <a class=“bri”>内容</a>
bs.select(head>title)
通过子标签层层查找 找head标签内的title标签
bs.select(“.mnav ~ .bri”)
查找兄弟标签
遍历当前标签的所有子项
for content in bs.children:
正则表达式
常用操作符
re库主要功能函数
基本使用
创建模式对象
pat=re.compile(“正则表达式”)
正则匹配
字符串模式
pat.search(“被校验的字符串”)
没有模式对象
re.search(“aa”,”aabbcc”)
用表达式aa校验aabbcc
利用findall
re.findall(“[A-Z]”,”AbBbCa”)
返回[‘A’,’B’,’C’]
sub替换
re.sub(“a”,”b”,”aaabcn”)
将aaabcn中的a全部替换为b
忽略\转义字符
a = r”\abc\’” print(a)
输出\abc\’
保存数据
Excel表保存 xlwt
创建workbook对象
workbook=xlwt.Workbook(encoding=“utf-8”)
创建工作表
worksheet=workbook.add_sheet(“sheet1”)
写入数据
worksheet.write(0,0,’hello’)
第一行第一列写入hello
保存数据表
workbook.save(“新建工作簿.xls”)
SQLite保存 sqlite3
连接数据库
mydb = sqlite3.connect(“myDataBase.db”)
如果没有则自动创建
创建表单
获取数据库游标
cursor=mydb.cursor()
执行sql语句
c.execute(sql)
sql = “我的sql语句”
获取select的数据
cursor=c.execude(“select xxx,xxx from xxx”) for row in cursor: print(“获取某一行的第一列”,row[0])
提交数据库操作
mydb.commit()
关闭数据库连接
mydb.close()
Flask
路由解析
基本使用
@app.route(‘/‘) def myfunction(): return “HelloWorld!”
通过用户访问的路径,匹配相应的函数
获取路径参数
字符串参数
@app.route(“/user/<name>”) def func(name): return “Hello%s”%name
整形参数
@app.route(“/user/<int:id>”) def func(id): return “Hello,VIP%d”%id
此外,还有float等其他类型
返回渲染的网页文件
基本使用
@app.route(“/“) def func(): return render_template(“index.html”)
template文件夹内需要有index.html
传递单个变量
传入
render_template(“index.html”,name=“阿腾木“)
接收
<body> 你好,{{ name }} </body>
传递列表
传入
render_template(“index.html”,names=[“张三“,”李四”])
接收
<body> {% for name in names %} {{ name }} {% endfor %} </body>
传递map
传入
render_template(“index.html”,people={“姓名”:”阿腾木”,”年龄”:”21”})
接收
{% for key,value in people.items() %} <li> {{ key }} : {{ value }} </li> {% endfor %}
表单提交
提交页
路由配置
render_template(“input.html”)
网页配置
<form action=“{{ url_for(‘result’) }}” method=“POST”> <p>输入:<input type=“text” name=“姓名”></p> <p><input type=“submit” value=“提交”></p> </form>
url_for(‘result’) 自动渲染当前路径
如https://ccatom.com/result
method=“POST” 表示请求方式为POST
接收页
路由配置
@app.route(‘/result’,method=[‘POST’]) def func(): if(request.method!=‘POST’) return result = request.form return render_template(“output.html”,result=result)
method=[“POST”] 指定接收的请求类型,如果不是POST,则不接收
使用flask包中的request
网页配置
<body> {{ result[“姓名”] }} </body>