提到爬虫这个东西,很多人很陌生,但对于程序界的或多或少听过。
爬虫言简意赅就是从网站上爬取有用的信息,进行分析,提取有用的价值
那么怎么去爬取信息呢,我们会用到一个攻击python,当然还有其他的工具,我们今天只介绍其一:python
这是爬取的效果
这是个强大的语言,著名的语句叫做:人生苦短,我学python。
下面来给你讲解下如何精确地爬取某个网站的排行信息。
我们会用到一个开发工具,pycharm
步骤1 获取排行榜地址
这个自行去网上查找把
步骤2 准备python环境
以pycharm开发工具为例
1.准备个纯净版的py文件
我们需要引入的库有bs4、re、request、xlwt、sqlite3
bs4:*它提供一些简单的、python式的函数用来处理导航、搜索、修改分析树等功能,可以用来解析文档,网页等*
re: 用于正则表达式
request:用于网页请求等
xlwt:用于表格操作
sqlite3:用于数据库操作
完事具备:开始撸代码
1.先定义个请求网页的方法
“`python
def askUrl():
head = {
“user-agent”: “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ”
“Chrome/98.0.4758.82 Safari/537.36 ”
}
# 请求网页并带有头部信息,模拟真实环境
request = urllib.request.Request(biliTopUrl, headers=head)
html = “”
try:
response = urllib.request.urlopen(request)
html = response.read().decode(“utf-8”)
# print(html)
except urllib.error.URLError as e:
print(e)
return html
备注:每个人浏览器不通,可以自行修改下user-agent的内容,也可不修改
“`
2.获取数据并解析
“`python
# 需要爬取的是标题、up主、播放量、弹幕书
findTitle = re.compile(r'<a .* target=”_blank”>(.*?)</a>’)
findUp = re.compile(r'<img alt=”up” .*/>(.*)</span></a>’, re.S)
findPlayCount = re.compile(r'<img alt=”play” .*/>(.*)</span> <span >’, re.S)
findBarrages = re.compile(r'<img alt=”like” .*/>(.*)</span></div></div></div> <!– –></div>’, re.S)
备注:上诉爬取的内容,根据自己的情况,用F12开发者模式进行提取。正则表达式过滤,
def getData():
# 定义一个dataList用于封装
dataList = []
# 访问页面
html = askUrl()
# 逐一解析数据
soup = BeautifulSoup(html, “html.parser”)
for item in soup.findAll(‘div’, class_=”content”): # 查找符合要求的字符串 ,形成列表
data = []
item = str(item)
title = re.findall(findTitle, item)[0]
data.append(title)
up = re.findall(findUp, item)[0]
data.append(up.strip())
playCount = re.findall(findPlayCount, item)[0]
data.append(playCount.strip())
barrages = re.findall(findBarrages, item)
if len(barrages) == 0:
data.append(” “)
else:
data.append(barrages[0].strip())
dataList.append(data)
print(dataList)
return dataList
获取到的dataList后续在存储用
“`
3.存储到Excel
“`python
def saveExcel(dataList):
# 定义Excel的表格
workBook = xlwt.Workbook(encoding=”utf-8″, style_compression=0)
# 定义sheet页
workSheet = workBook.add_sheet(“某站排行榜”, cell_overwrite_ok=True)
# 定义一个列表元组
cols = (“标题”, “XX主”, “播放量”, “弹幕数”)
for i in range(0, 4):
workSheet.write(0, i, cols[i]) # 输入列名
for i in range(0, len(dataList)):
data = dataList[i]
for j in range(0, 4):
workSheet.write(i + 1, j, data[j]) # 内容添加
workBook.save(“某站排行榜.xlsx”)
print(“插入Excel表成功”)
“`
4.存储到数据库
“`python
说明:python3 定义数据库,如果没有数据库则会自动创建,创建在当前项目目录下,可直接双击在右侧栏查看到
def saveDB(dataList):
initDB()
conn = sqlite3.connect(dbName)
cur = conn.cursor()
for data in dataList:
# 获取下标
for index in range(len(data)):
data[index] = ‘”‘ + data[index] + ‘”‘ # 数据库插入需要加上单引号
sql = ”’
insert into biliTop(title, upName, playCount, barrages)
values(%s)
”’ % “,”.join(data) # 将字符以,进行拼接
print(sql)
cur.execute(sql)
conn.commit()
cur.close()
conn.close()
print(“插入数据库结束”)
dbName = “hoholi”
def initDB():
sql = ”’
drop table if exists biliTop;
create table dddddTop(
id integer primary key autoincrement,
title text,
upName varchar,
playCount varchar,
barrages varchar
)
”’
conn = sqlite3.connect(dbName)
cur = conn.cursor()
cur.executescript(sql)
conn.commit() # 记得要提交如果是更新的,如果只是查询类的,可以不用
cur.close()
conn.close()
特别注意:更新数据记得commit,如果是查询不需要
“`
依赖库:
“`python
from bs4 import BeautifulSoup
import re # 正则表达式
import urllib.request, urllib.error # 制定URL,获取网页数据
import xlwt # 进行excel操作
import sqlite3 # 进行SQLite数据库操作
“`
重点:我们的运行一般是通过main方法运行的,特别强调,if __name__ == “__main__”:定义一定要放在最底下,代码不能放在其他函数之上,否则会找不到。
“`python
hhahahaTopUrl = ‘https://www.hahhahaha.com/v/popular/rank/all’
def main():
dataLists = getData()
saveExcel(dataLists)
saveDB(dataLists)
if __name__ == “__main__”:
main()
“`
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至87172970@qq.com举报,一经查实,本站将立刻删除。