百战成灰

V1

2022/07/27阅读:22主题:默认主题

爬虫

#-*- codeing = utf-8 -*-
#@Time : 2022/7//25
#@Author : lizi
#@File : spider.py
#@Software: PyCharm
#******实时获取豆瓣肖申克的救赎评分人数基于此实时传输到mysql数据库,构建实时数据库****************
from bs4 import BeautifulSoup     #网页解析,获取数据
import re       #正则表达式,进行文字匹配
import urllib.request,urllib.error      #制定URL,获取网页数据
import xlwt     #进行excel操作
import time
import pymysql



#得到指定一个URL的网页内容
def askURL(url):
    head = {                #模拟浏览器头部信息,向豆瓣服务器发送消息
        "User-Agent""用自己的,注意小心被封ip"
    }
                            #用户代理,表示告诉豆瓣服务器,我们是什么类型的机器、浏览器(本质上是告诉浏览器,我们可以接收什么水平的文件内容)

    request = urllib.request.Request(url,headers=head)
    html = ""
    try:
        response = urllib.request.urlopen(request)
        html = response.read().decode("utf-8")
        #print(html)
    except urllib.error.URLError as e:
        if hasattr(e,"code"):
            print(e.code)
        if hasattr(e,"reason"):
            print(e.reason)
    return html




#保存数据
def saveData(datalist,savepath):
    print("save....")
    book = xlwt.Workbook(encoding="utf-8",style_compression=0)  #创建workbook对象
    sheet = book.add_sheet('豆瓣电影Top250',cell_overwrite_ok=True)    #创建工作表
    col = ("电影详情链接","图片链接","影片中文名","影片外国名","评分","评价数","概况","相关信息")
    for i in range(0,8):
        sheet.write(0,i,col[i]) #列名
    for i in range(0,250):
        print("第%d条" %(i+1))
        data = datalist[i]
        for j in range(0,8):
            sheet.write(i+1,j,data[j])      #数据

    book.save(savepath)       #保存



# if __name__ == "__main__":          #当程序执行时
# 调用函数

while True:
    findrenshu = re.compile(r'<span property="v:votes">(.*?)</span>')
  
    baseurl = "https://movie.douban.com/subject/1292052/"
    # 1.爬取网页

    askURL("https://movie.douban.com/subject/1292052/")
    html = askURL(baseurl)  # 保存获取到的网页源码
    soup = BeautifulSoup(html, "html.parser")

    for item in soup.find_all('div', class_="rating_sum"):  # 查找符合要求的字符串,形成列表
        # print(item)   #测试:查看电影item全部信息
        # 保存一部电影的所有信息
        item = str(item)

        # 影片详情的链接
        link = re.findall(findrenshu, item)[0]  # re库用来通过正则表达式查找指定的字符串
        # 添加链接
        print(link)
    # cur.execute(sql)
    con = pymysql.connect(host='localhost', user='root', password='123456', database='douban', charset='utf8')
    # 创建游标
    cur = con.cursor()
    try:

        Sqlcomm = """update test set pfrs="""+link+""" where movie=%s"""
        res = cur.execute(Sqlcomm, ("xsk"))
        if res == 1:
            # 一条受影响,返回一
            print("修改成功")
        con.commit()  # 提交
    except pymysql.Error as err:
        con.rollback()  # 回滚
        print(err)
    finally:
        con.close()

    time.sleep(10)

      ```

分类:

后端

标签:

Python

作者介绍

百战成灰
V1