python爬取y80s电影并插入mysql数据库

  • 需求分析
  • 功能
  • 代码实现
    • 爬取功能
    • 本地查询功能
  • 运行情况
    • 爬取功能:
    • 查询功能:
  • 存在问题

需求分析

1、学习中…写着玩
2、用到的库:requests、bs4、mysql.connector、gevent

功能

1、爬取好评榜电影信息(名字、简介、分数、播放链接、迅雷下载链接)到本地数据库(mysql)
2、用tkinter做了个小页面,查询本地电影信息。

代码实现

爬取功能

from gevent import monkey
monkey.patch_all()
import requests,time,gevent
import mysql.connector
from bs4 import BeautifulSoup
from gevent.queue import Queueheaders = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0;\Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36'}
work = Queue()#创建队列实例
conn = mysql.connector.Connect(host='192.168.0.9',user='root',passwd='huantian',database='learn')
#host地址根据实际情况改
cursor = conn.cursor()#创建游标#获取每页电影的链接,加入列表
def pageN1():n = int(input('输入要爬取的页数:'))#要爬取的好评页总页数pageN1_list = []for i in range(1,n+1):url_pageN1 = 'http://www.y80s.com/movie/list/----g-p'+str(i)pageN1_list.append(url_pageN1)print('正在获取首页链接:'+ url_pageN1)return pageN1_list#爬取每部电影的地址短链接,加入列表
def pageN2(urlN1):url_pageN2_list = []for url in urlN1:pageN1_res = requests.get(url,headers=headers)pageN1_soup = BeautifulSoup(pageN1_res.text,'html.parser')pageN1_film = pageN1_soup.findAll(class_='h3')for film in pageN1_film:url_pageN2 = 'http://www.y80s.com'+ (film.find('a')['href']).strip()url_pageN2_list.append(url_pageN2)print('正在获取电影详情页链接:'+ url_pageN2)time.sleep(0.3)return url_pageN2_list#爬取每部电影的信息
def sprider():while not work.empty():#直到任务列表为空才停止循环try:real_url = work.get_nowait()#从work队列中获取真实要爬取的二级页面地址pageN2_res = requests.get(real_url,headers=headers)#requests爬取结果给respageN2_soup = BeautifulSoup(pageN2_res.text,'html.parser')#创建BeautifulSoup对象film_info = pageN2_soup.find('div',class_='info')# find方法定位到('div',class_='info')标签,缩小爬取范围film_name = pageN2_soup.find('h1',class_='font14w').text.strip().replace(' ','')film_story = pageN2_soup.find(id='movie_content').text[:-12]film_score = pageN2_soup.find('div',style='float:left; margin-right:10px;').text.strip()[-3:]film_play_url = 'http://www.y80s.com'+ pageN2_soup.find('div',class_='info').findAll('a')[-1]['href']xldown_url = pageN2_soup.find(class_='xunlei dlbutton1').find('a')['href']#比较繁琐,目前xpath定位还不太明白只能用find方法一点点获取需要的信息print('电影名:{}\n电影简介:{}\n豆瓣评分:{}\n播放地址:{}\n迅雷下载:{}\n'.format(\film_name,film_story,film_score,film_play_url,xldown_url))sql_insert = "INSERT INTO `movie`(`name`, `story`, `score`,`play_url`, `down_url`)VALUES('%s','%s','%s','%s','%s')"%(film_name,film_story,film_score,film_play_url,xldown_url)print('插入语句:'+ sql_insert+'\n')cursor.execute(sql_insert)#执行上面sql插入语句print('剩余进程:{}个...'.format(work.qsize()))time.sleep(9)except AttributeError:#有的电影没地址抛出异常跳过print(film_name +'爬取失败,请检查以下链接:'+real_url+'\n')tasks_list = []#创建任务列表
urlN1 = pageN1()#执行pageN1方法获取要爬取的一级页面的地址
urlN2 = pageN2(urlN1)#执行pageN2方法,传入pageN1返回的URL列表,获取要爬取需要的信息的二级页面地址
for u in urlN2:#遍历二级页面地址work.put_nowait(u)#把每个地址加入队列for x in range(10):#相当于创建10个爬虫进程task = gevent.spawn(sprider)#gevent.spawn方法创建一个线程tasks_list.append(task)#把每个进程加入任务列表gevent.joinall(tasks_list)#gevent.joinall方法,任务全部开启
conn.commit()#提交数据库插入
conn.close()#关闭数据库
print('爬虫结束!')

本地查询功能

import mysql.connector
from tkinter import *conn = mysql.connector.connect(host='192.168.0.9',user='root',passwd='huantian',db='learn')
cursor = conn.cursor()def data_sql(name):# select_sql = 'select * from movie limit 0,5'select_sql = "select * from `movie` where name like '%{}%'".format(name)print(select_sql)cursor.execute(select_sql)data = cursor.fetchall()return datadef data_res(name):data = data_sql(name)#调用上面那个方法返回咱们需要的dataname_list = []#创建个列表存电影名字info_dict = {}#创建个字典存每部电影的详细信息name = name_text.get(0.0, END).strip().replace("\n", " ")if data == [] or name.strip()=='':#判断是否空输入或者没数据error = '输入错误,或没有资源!重输或到网站查找。'story = '无'score = '无'play_url = '无'down_url = '无'else:for d in data:#遍历data数据取得需要的信息name = d[1]name_list.append(name)#用于显示查到的名字story = d[2]score = d[3]play_url = d[4]down_url = d[5]info_dict[name]=[story,'豆瓣评分:'+score,'播放链接:'+play_url,'下载链接:'+down_url]error = '共找到'+str(len(info_dict))+'个相关资源:\n'+str(name_list).replace("'","").replace('[','').replace(']','')return error,info_dictdef button():name = name_text.get(0.0, END).strip().replace("\n", " ")error,info_dict = data_res(name)result_text.configure(state='normal')result_text.delete(0.0, END)result_text.insert(END, error)result_text.configure(state='disabled')info = str(info_dict).replace("'","")[1:-2].replace(']','\n').replace(',','\n').replace('[','\n').replace(' ','')print(info)story_text.configure(state='normal')story_text.delete(0.0, END)story_text.insert(END,info)root = Tk()
root.title('80s好评榜电影找找看')
root.geometry('400x500')result_text = Text(root, bg='gray90')
result_text.configure(state='disabled')
result_text.place(x=0, y=42, width=400,height=50)name_text = Text(root, bg='gray90')
name_text.place(x=0, y=140, width=400,height=30)story_text = Text(root, bg='gray90')
story_text.configure(state='disabled')
story_text.place(x=0, y=200, width=400)random_food_button = Button(root, text='开始查找', command=button)
random_food_button.place(x=1, y=1, width=398, height=40)title_label = Label(root, text='查询电影:')
title_label.place(x=1, y=115)
title_label = Label(root, text='电影详情:')
title_label.place(x=1, y=175)
root.mainloop()

运行情况

爬取功能:

获取电影详情页地址中…
开始爬取,并且插入数据库…
phpmyadmin查看获取的数据

查询功能:

查询保存在数据库的电影信息

存在问题

1、只能爬取70多部电影,time.sleep 9秒也不好使,难道还要更慢?还没找到合适的解决办法。
2、查询功能中,想要显示多个结果的不知道怎么处理,只能一点点扣字符串,比较烦。
3、求大神指教!

python爬取y80s电影并插入mysql数据库相关推荐

  1. python爬取 xueqiu网 数据 存入MySQL数据库中

    #导入包 from urllib import request import json import pymysql #声名一个class类 class mysql_connect(object):# ...

  2. python爬取豆瓣电影评论_python 爬取豆瓣电影评论,并进行词云展示及出现的问题解决办法...

    def getHtml(url): """获取url页面""" headers = {'User-Agent':'Mozilla/5.0 ( ...

  3. 用 Python selenium爬取股票新闻并存入mysql数据库中带翻页功能demo可下载

    用 Python selenium爬取实时股票新闻并存入mysql数据库中 1.分析需求 2.创建表 3.分析需要爬取的网页内容 4.python里面selenium进行爬虫操作 1.添加包 2.连接 ...

  4. 利用python爬取豆瓣电影top250

    利用python爬取豆瓣电影top250: 注:本内容只是作为个人学习记录 1.业务分析 进入网页https://movie.douban.com/top250 可以看见每部电影都呈现在眼前,点击电影 ...

  5. 用python爬取阳光电影的链接

    用python爬取阳光电影的链接,并存入文本.把链接直接复制到迅雷软件即可下载电影,方便快捷.python代码如下: # -*- encoding: utf-8 -*- ""&qu ...

  6. Python爬取豆瓣电影top250的电影信息

    Python爬取豆瓣电影top250的电影信息 前言 一.简介 二.实例源码展示 小结 前言 相信很多小伙伴在学习网络爬虫时,老师们会举一些实例案例讲解爬虫知识,本文介绍的就是经典爬虫实际案例–爬取豆 ...

  7. (伪)Python爬取猫眼电影(反反爬虫过程中遇到的坑)

    Python爬取猫眼电影 1.打开一个猫眼电影的URL,例如本月的较火的电影<毒液:致命守护者>http://maoyan.com/films/42964 直接F12,查看审核元素,发现上 ...

  8. python爬取猫眼电影数据

    每天一点点,记录学习每一步 近期爬虫项目: 1:python 爬取菜鸟教程python100题,百度贴吧图片反爬虫下载,批量下载 2:python爬虫爬取百度贴吧图片,requests方法 3:pyt ...

  9. 源码大公开!Python爬取豆瓣电影Top250源代码,赶紧收藏!

    哈喽~大家好,我是恰恰.不知道是不是有很多小伙伴跟我一样,很喜欢看电影,尤其是那种别人推荐的豆瓣高分电影,所以学Python就有一个好处,用Python爬取豆瓣电影那是分分钟的事,再也不用因为有些电影 ...

最新文章

  1. 【CF】474E Pillars
  2. 将信息写入TXT文本中(java)
  3. DCMTK:函数dcmGenerateUniqueIdentifier的测试程序
  4. servlet怎么接受请求_谁再问Servlet的问题,我就亲自上门来教学了
  5. 2018第一场多校 -补题
  6. 【JS 笔记】比较操作符之大小与记录
  7. Win10下VB6.0开发之错误--无法打开对象窗口和代码窗口
  8. bootstrap-引用-命名来源
  9. MVC5+EF6--1 创建Entity Framework数据模型
  10. 华为HCIE云计算培训笔记第一天
  11. cisco 2800路由器密码恢复
  12. IPAM——IP地址管理
  13. 导出虚拟机的OVF 模板
  14. python调用python脚本
  15. MA均线指标详解、价托、量托
  16. 讲道理 | 计算正交投影算子
  17. 【ElementUI】el-upload 到底该怎么使用?记录有时上传图片会失败,有时上传成功又出现图片闪动的问题
  18. ABAP资产负债表作业
  19. 番茄助手 VS2015
  20. 因为计算机x3daudio1_7.dll,x3daudio1_7.dll

热门文章

  1. 软件这么多,我还是爱这款
  2. spark求共同好友
  3. 研究型论文_具有 ExtraTrees 特征选择、极限学习机集成和 softmax 聚合的多层入侵检测系统(英文论文)
  4. 区块链共识机制:POW、POS、DPOS、PBFT、POOL
  5. 使用站长运营工具|百度批量推送工具,助站长快速提升收录
  6. 超分论文笔记2020CVPR视频超分:Zooming Slow-Mo- VSR with Temporal Group Attention-TDAN
  7. 前端架构设计第十一课 自动化构建部署和工具
  8. Sentinel-5P数据介绍与处理
  9. 机器学习day2-正则化/监督非监督
  10. 悟空问答、知乎和分答的互联网知识经济变现战争