今天给大家分享一个python爬虫入门,用60行代码用python编译一个简易爬虫,这里以爬取肖申克的救赎这部电影的评论为例子,并将爬取的数据库写入一个txt文本当中,最后将数据写入mysql数据库的表当中
开发工具pycharm2020、mysql5.7(数据库)、Navicat Premium 15(数据库可视化工具)
开发环境python3.7.0
那么如何爬取评论前9页数据也就是180个评论,并将爬取的数据库写入一个txt文本当中,最后将其写入数据库呢?
直接上代码main.py
解析在代码中
第一个函数:写入数据库函数
addData(biao)
# 连接数据库,写入数据库函数
def addData(biao):
#连接数据库,初始化
con = pymysql.connect(host="localhost",user="root",password="",database="comment")
try:
cursor = con.cursor()
#写入数据库操作
cursor.execute("insert into biao1(biao)value(%s)",[biao])
con.commit()
cursor.close()
#关闭数据库
finally:
con.close()
#这个用于第二个爬虫主函数中
findcomment = re.compile(r'<span class="short">(.*)</span>') # 根据网页的源代码写一个正则表达式,对应评论的文本
第二个函数:爬虫主函数
GetTxt(start)
# 爬虫主函数
def GetTxt(start):
#爬取的页面,因为第一到第九页,页面地址呈现一个规律递增的状态,所以在运行主函数调用爬虫主函数的时候,只要控制这个递增的参数,就能依次爬取前九页的数据
#*表示因为涉及某些版权方网站这里就不写出来了
url = '*/comments?start=' + \
str(start) + '&limit=20&sort=time&status=P'
#这是一个应对反爬机制的一个最基本的方法,因为当你用一个机器爬取页面数据的时候,服务器会做一个反爬,所以我们就要模拟一个浏览器向服务器发送读取数据信息
head = { # 模拟浏览器头部信息,向服务器发送消息。Firefox浏览器头部信息如下:
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62"
}
request = urllib.request.Request(url, headers=head)
response = urllib.request.urlopen(request)
#爬取页面的数据位置
html_data = response.read().decode('utf-8')
commentlist = []
soup = BeautifulSoup(html_data, 'html.parser')
comment_div_lits = soup.find_all('div', class_='comment')
#依次爬取信息
for item in comment_div_lits:
eachcomment = re.findall(findcomment, str(item)) # 如果不把item转换为str类型findall函数会报错
#打印爬取信息到控制台
print(eachcomment)
#将信息添加到commentlist数组当中
commentlist.append(eachcomment)
#创建打开一个myfirst1.txt的文本文件
f = open('myfirst1.txt', 'a', encoding='utf-8')
#循环写入myfirst1.txt的文本文件中去
for comment in commentlist:
if comment != []:
f.write(comment[0]+'\r\n') #打印至txt
#关闭txt文本文件
f.close()
#调用写入数据库的函数,传入参数
for biao in commentlist:
if biao !=[]:
addData(biao)
第三个函数:运行主函数
main()
# 主函数
def main():
#传入找到的规律递增的参数
for i in range(1, 181, 20):
print(i)
GetTxt(i)
print("\n打印完成")
#运行主函数
if __name__ == '__main__':
main()
运行结果图
完整的文件压缩包链接(免费食用)!