基础页面:https://movie.douban.com/top250

  代码:

from time import sleep
from requests import get
from bs4 import BeautifulSoup
import re
import pymysqldb = pymysql.connect(host='localhost',user='root',password='123456',db='douban',charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor)
try:with db.cursor() as cursor:sql = "CREATE TABLE IF NOT EXISTS `top250` (" \"`id` int(6) NOT NULL AUTO_INCREMENT," \"`top` int(6) NOT NULL," \"`page-code` int(6) NOT NULL," \"`title` varchar(255) NOT NULL," \"`origin-title` varchar(255)," \"`score` float NOT NULL," \"`theme` varchar(255) NOT NULL," \"PRIMARY KEY(`id`)" \") ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;"cursor.execute(sql,)
finally:db.commit()base_url = 'https://movie.douban.com/top250'
header = {'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','Accept-Encoding': 'gzip, deflate, br','Accept-Language': 'zh-CN,zh;q=0.9','Cache-Control': 'max-age=0','Connection': 'keep-alive','Cookie': 'xxx','Host': 'movie.douban.com','Referer': 'https://movie.douban.com/chart','Upgrade-Insecure-Requests': '1','User-Agent': 'xxx'
}def crawler(url=None, headers=None, delay=1):r = get(url=url, headers=headers, timeout=3)soup = BeautifulSoup(r.text, 'html.parser')page_tag = soup.find('span', attrs={'class': 'thispage'})page_code = re.compile(r'<span class="thispage">(.*)</').findall(str(page_tag))[0]movie_ranks = soup.find_all('em', attrs={'class': ''})movie_titles = soup.find_all('div', attrs={'class': 'hd'})movie_scores = soup.find_all('span', attrs={'class': 'rating_num'})movie_themes = soup.find_all('span', attrs={'class': 'inq'})next_page = soup.find('link', attrs={'rel': 'next'})for ranks, titles, scores, themes in zip(movie_ranks, movie_titles, movie_scores, movie_themes):rank = re.compile(r'<em class="">(.*)</').findall(str(ranks))regex_ts = re.compile(r'<span class="title">(.*)</').findall(str(titles))title = regex_ts[0]score = re.compile(r'<span class="rating_num" property="v:average">(.*)</').findall(str(scores))[0]theme = re.compile(r'<span class="inq">(.*)</').findall(str(themes))[0]try:origin_title = regex_ts[1]origin_title = re.compile(r'./.(.+)').findall(origin_title)[0]with db.cursor() as cursor:sql = "INSERT INTO `top250` (`top`, `page-code`, `title`, `origin-title`, `score`, `theme`)" \" VALUES (%s, %s, %s, %s, %s, %s)"cursor.execute(sql, (rank, page_code, title, origin_title, score, theme,))except IndexError:with db.cursor() as cursor:sql = "INSERT INTO `top250` (`top`, `page-code`, `title`, `score`, `theme`)" \" VALUES (%s, %s, %s, %s, %s)"cursor.execute(sql, (rank, page_code, title, score, theme,))finally:db.commit()if next_page is not None:headers['Referer'] = urlnext_url = base_url + re.compile(r'<link href="(.*)" rel="next">').findall(str(next_page))[0]sleep(delay)crawler(url=next_url, headers=headers, delay=3)crawler(base_url, header, 0)
db.close()

  结果:

mysql> select top,title,score from top250 where id = 175;
+-----+--------+-------+
| top | title  | score |
+-----+--------+-------+
| 176 | 罗生门 |   8.7 |
+-----+--------+-------+
1 row in set (0.00 sec)mysql> select top,title,page-code,score from top250 where id = 175;
ERROR 1054 (42S22): Unknown column 'page' in 'field list'
mysql> select top,page-code,title,score from top250 where id = 175;
ERROR 1054 (42S22): Unknown column 'page' in 'field list'
mysql> select page-code from top250 where id = 175;
ERROR 1054 (42S22): Unknown column 'page' in 'field list'
mysql> describe top250-> ;
+--------------+--------------+------+-----+---------+----------------+
| Field        | Type         | Null | Key | Default | Extra          |
+--------------+--------------+------+-----+---------+----------------+
| id           | int(6)       | NO   | PRI | NULL    | auto_increment |
| top          | int(6)       | NO   |     | NULL    |                |
| page-code    | int(6)       | NO   |     | NULL    |                |
| title        | varchar(255) | NO   |     | NULL    |                |
| origin-title | varchar(255) | YES  |     | NULL    |                |
| score        | float        | NO   |     | NULL    |                |
| theme        | varchar(255) | NO   |     | NULL    |                |
+--------------+--------------+------+-----+---------+----------------+
7 rows in set (0.32 sec)mysql> select page-code from top250 where id = 175;
ERROR 1054 (42S22): Unknown column 'page' in 'field list'
mysql> select origin-title from top250 where id = 175;
ERROR 1054 (42S22): Unknown column 'origin' in 'field list'
mysql> select origin_title from top250 where id = 175;
ERROR 1054 (42S22): Unknown column 'origin_title' in 'field list'
mysql> select * from top250 where id = 175;
+-----+-----+-----------+--------+--------------+-------+-------------------+
| id  | top | page-code | title  | origin-title | score | theme             |
+-----+-----+-----------+--------+--------------+-------+-------------------+
| 175 | 176 |         8 | 罗生门 | 羅生門       |   8.7 | 人生的N种可能性。 |
+-----+-----+-----------+--------+--------------+-------+-------------------+
1 row in set (0.00 sec)mysql> select * from top250 where title = 未麻的部屋;
ERROR 1054 (42S22): Unknown column '未麻的部屋' in 'where clause'
mysql> select * from top250 where top=175;
Empty set (0.00 sec)mysql>

  两个小问题:

  1.没想到数据库字段不能用'-'...,于是page-code字段与origin-title字段不能独立进行查找。。。

  2.不知道为啥top175的电影《未麻的部屋》没爬到。。。

  建议使用scrapy。

  用scrapy的一些好处是配置爬虫很方便,还有其内部自带的html解析器、对不完整的url的组建等十分便利。

  最后,吐槽一下,之前的电脑配置太差,跑深度学习程序的过程耗尽内存,出现莫名的bug后,蓝屏死机就再也没法启动了。。。所以,暂时不能更新博客了。。。

转载于:https://www.cnblogs.com/darkchii/p/10003876.html

python3+requests+BeautifulSoup+mysql爬取豆瓣电影top250相关推荐

  1. Python爬虫实战 | (3) 爬取豆瓣电影Top250

    在本篇博客中,我们将使用requests+正则表达式来爬取豆瓣电影TOP250电影榜单,获取每部电影的序号.片名.导演.编剧.主演.类型.制作国家/地区.语言.上映日期.片长.又名.豆瓣评分和剧情简介 ...

  2. 使用python3爬取豆瓣电影top250

    经过一个多星期的学习,对python3的语法有了一定了解,马上动手做了一个爬虫,检验学习效果 目标 爬取豆瓣电影top250中每一部电影的名称.排名.链接.名言.评分 准备工作 运行平台:window ...

  3. python BeautifulSoup爬取豆瓣电影top250信息并写入Excel表格

    豆瓣是一个社区网站,创立于2005年3月6日.该网站以书影音起家,提供关于书籍,电影,音乐等作品信息,其描述和评论都是由用户提供的,是Web2.0网站中具有特色的一个网站. 豆瓣电影top250网址: ...

  4. day02 requests请求库爬取豆瓣电影信息+selenium请求库

    一. requests请求库爬取豆瓣电影信息 - 请求url http://movie.douban.com/top250 - 请求方式 GET - 请求头 user-agent    cookies ...

  5. 一起学爬虫——通过爬取豆瓣电影top250学习requests库的使用

    一起学爬虫--通过爬取豆瓣电影top250学习requests库的使用 学习一门技术最快的方式是做项目,在做项目的过程中对相关的技术查漏补缺. 本文通过爬取豆瓣top250电影学习python req ...

  6. python爬取豆瓣电影top250_【Python3爬虫教程】Scrapy爬取豆瓣电影TOP250

    今天要实现的就是使用是scrapy爬取豆瓣电影TOP250榜单上的电影信息. 步骤如下: 一.爬取单页信息 首先是建立一个scrapy项目,在文件夹中按住shift然后点击鼠标右键,选择在此处打开命令 ...

  7. Python爬虫 爬取豆瓣电影TOP250

    Python爬虫 爬取豆瓣电影TOP250 最近在b站上学习了一下python的爬虫,实践爬取豆瓣的电影top250,现在对这两天的学习进行一下总结 主要分为三步: 爬取豆瓣top250的网页,并通过 ...

  8. 爬虫练习-爬取豆瓣电影TOP250的数据

    前言: 爬取豆瓣电影TOP250的数据,并将爬取的数据存储于Mysql数据库中 本文为整理代码,梳理思路,验证代码有效性--2020.1.4 环境: Python3(Anaconda3) PyChar ...

  9. 爬取豆瓣电影Top250影片信息

    爬取豆瓣电影Top250影片信息 查看影片的详细信息 爬取过程 需安装的包 确定爬取地址 发送请求头 解析数据 保存数据 完整代码 查看影片的详细信息 进入豆瓣电影Top250,选择某一影片,右击,选 ...

最新文章

  1. easy-mock本地部署成功,访问报错:EADDRNOTAVAIL 0.0.0.0:7300 解决方案
  2. 24小时临时邮箱_免费临时邮箱和接码平台
  3. 启动hive报错:java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang
  4. 怎样将两个html页面合并,如何把WORD的两个页面合并在一起?
  5. Kubenetes里pod和service绑定的实现方式
  6. php单文件压缩的功能函数的实现
  7. jquery的懒加载记录一下踩得坑
  8. 仰望星空后,更将脚踏实地!
  9. 鸿蒙手机系统还没有开发,华为鸿蒙手机太难了!引发开发者大吐槽:为何没有自己独特风格?-互联网/电商-文章-小虾米...
  10. 积微论坛第一期 - 基于大数据整合预测土壤枯萎病的发生 (文稿分享)
  11. 【环境搭建003】UBUNTU + ECLIPS + ANDROID 嵌入式系统编译环境搭建遇到的稀奇古怪的问题集合
  12. Fragment的使用
  13. SAP WM + PDA项目 来料入库流程
  14. 英特尔的新方向:称王集成计算设备领域
  15. 【Uly】团队&团队博客成立典礼~~
  16. 犹太民族与基督的真相!
  17. 360,一场阴谋的制造者
  18. 【30-60s计数器电路设计】数电课设
  19. 2022-03-05 使用 putty 远程连接阿里云服务器
  20. 寒冬已过,2023抓住IT复苏新机会

热门文章

  1. MathType中如何实现上下两行公式“=”号对齐
  2. 使用ZED相机录制事件双目数据集
  3. @loj - 2478@「九省联考 2018」林克卡特树
  4. C++入门到精通。(五、C++的运算符。)
  5. php识别word语言,PHP读取word文档
  6. 朴素贝叶斯的概念简介
  7. 王道操作系统网课笔记合集
  8. NBA球员 ESPN前20排名:詹姆斯再居榜首
  9. 【游戏】任天堂Nintendo Switch超详细购买/使用指南以及注意事项(根据自己使用持续更新中...)
  10. 微信小程序引用vant toast 提示 “未找到 van-toast 节点“