采集地址https://movie.douban.com/top250

一、创建mysql数据库

CREATE TABLE `t_doubantop` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`num` int(11) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
`charactor` varchar(255) DEFAULT NULL,
`remark` varchar(255) DEFAULT NULL,
`score` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=273 DEFAULT CHARSET=utf8;

二、采集代码

from bs4 import BeautifulSoup
import pymysql
import requests
import re
import os #链接数据库
def connect_db():
connect = pymysql.connect( # 连接数据库
user="root",
password="password",
host="127.0.0.1",
db="test",
port=3306,
charset=("utf8"), # 注意编码一定要设置,否则gbk你懂的
use_unicode=True,
)
return connect def get_html(web_url): # 爬虫获取网页没啥好说的
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.108 Safari/537.36 2345Explorer/8.5.1.15355"}
html = requests.get(url=web_url, headers=header).text
Soup = BeautifulSoup(html, "lxml")
data = Soup.find("ol").find_all("li") # 还是有一点要说,就是返回的信息最好只有你需要的那部分,所以这里进行了筛选
return data def get_info(all_move, connect, cursor):
for info in all_move:
# 编号
nums = re.findall(r'<em class="">\d+</em>', str(info), re.S | re.M) # 编号我使用的是正则表达式来获取
nums = re.findall(r'\d+', str(nums), re.S | re.M)
num = nums[0] # 名字
names = info.find("span") # 名字比较简单 偷了一下懒直接获取第一个span就是
name = names.get_text() # 导演
charactors = info.find("p") # 这段信息中有太多非法符号你需要替换掉
charactor = charactors.get_text().replace(" ", "").replace("\n", "") # 使信息排列规律
charactor = charactor.replace("\xa0", "").replace("\xee", "").replace("\xf6", "").replace("\u0161", "").replace("\xf4", "").replace("\xfb", "").replace("\u2027", "") # 评语
remarks = info.find_all("span", {"class": "inq"})
print(remarks)
if remarks: # 这个判断是因为有的电影没有评语,你需要做判断
remark = remarks[0].get_text().replace("\u22ef", "")
else:
remark = "此影片没有评价" # 评分
scores = info.find_all("span", {"class": "rating_num"}) # 没啥好说 匹配就行
score = scores[0].get_text() data = {'num':num, 'name':name, 'charactor':charactor, 'remark':remark, 'score':score}
print(data)
# 保存数据
cursor.execute("insert into t_doubantop(num,name,charactor,remark,score)values(%s,%s,%s,%s,%s)",
[data['num'], data['name'], data['charactor'], data['remark'], data['score']])
# 提交
connect.commit()
return if __name__ == "__main__":
connect = connect_db()#链接数据库
cursor = connect.cursor() # 设置游标
page = 0 # 初始化页数,TOP一共有250部 每页25部
while page <= 225:
web_url = "https://movie.douban.com/top250?start=%s&filter=" % page
all_move = get_html(web_url) # 返回每一页的网页
data = get_info(all_move, connect, cursor) # 匹配对应信息并保存
page += 25 connect.close() # 最后记得关掉连接

三、数据库保存结果

pyhon-爬虫实战抓取豆瓣top250到mysql的更多相关文章

  1. Pyhton爬虫实战 - 抓取BOSS直聘职位描述 和 数据清洗

    Pyhton爬虫实战 - 抓取BOSS直聘职位描述 和 数据清洗 零.致谢 感谢BOSS直聘相对权威的招聘信息,使本人有了这次比较有意思的研究之旅. 由于爬虫持续爬取 www.zhipin.com 网 ...

  2. Python爬虫实战---抓取图书馆借阅信息

    Python爬虫实战---抓取图书馆借阅信息 原创作品,引用请表明出处:Python爬虫实战---抓取图书馆借阅信息 前段时间在图书馆借了很多书,借得多了就容易忘记每本书的应还日期,老是担心自己会违约 ...

  3. Scrapy爬虫入门系列4抓取豆瓣Top250电影数据

    豆瓣有些电影页面需要登录才能查看. 目录 [隐藏]  1 创建工程 2 定义Item 3 编写爬虫(Spider) 4 存储数据 5 配置文件 6 艺搜参考 创建工程 scrapy startproj ...

  4. Python爬虫之抓取豆瓣影评数据

    脚本功能: 1.访问豆瓣最受欢迎影评页面(http://movie.douban.com/review/best/?start=0),抓取所有影评数据中的标题.作者.影片以及影评信息 2.将抓取的信息 ...

  5. 简单的爬虫例子——爬取豆瓣Top250的电影的排名、名字、评分、评论数

    爬取思路: url从网页上把代码搞下来bytes decode ---> utf-8 网页内容就是我的待匹配的字符串ret = re.findall(正则,待匹配的字符串), ret 是所有匹配 ...

  6. 爬虫之爬取豆瓣top250电影排行榜及爬取斗图啦表情包解读及爬虫知识点补充

    今日内容概要 如何将爬取的数据直接导入Excel表格 #如何通过Python代码操作Excel表格 #前戏 import requests import time from openpyxl impo ...

  7. 抓取豆瓣的电影排行榜TOP100

    #!/usr/bin/env python # -*- coding:utf-8 -*- """ 一个简单的Python爬虫, 用于抓取豆瓣电影Top前100的电影的名称 ...

  8. Python爬虫----抓取豆瓣电影Top250

    有了上次利用python爬虫抓取糗事百科的经验,这次自己动手写了个爬虫抓取豆瓣电影Top250的简要信息. 1.观察url 首先观察一下网址的结构 http://movie.douban.com/to ...

  9. Python小爬虫——抓取豆瓣电影Top250数据

    python抓取豆瓣电影Top250数据 1.豆瓣地址:https://movie.douban.com/top250?start=25&filter= 2.主要流程是抓取该网址下的Top25 ...

随机推荐

  1. DATEADD和DATEDIFF

    DateAdd函数 返回 返回包含一个日期的 Variant (Date),这一日期还加上了一段时间间隔. 语法 DateAdd(interval, number, date) DateAdd 函数语 ...

  2. ASP .Net Core 2.0 修改默认端口

    ASP .Net Core 的默认端口是5000,如果想在同一台服务器上运行多个实例,就不能都监听5000端口了,需要每一个实例都监听不同的端口.当然,如果您正在使用IIS或者Jexus来托管,可以不 ...

  3. 2、ASP .NETCore 2.0之视图

    一.Razor基础 声明:Razor不是编程语言,是服务器端标记语言.Razor是一种允许开发者在网页中嵌入服务器端代码的标记语法(主要是针对VB和C#). 1.C#中Razor基本语法 (1).Ra ...

  4. 工作中的Buff加成-结构化思考力:自创独门武功 3-3-3原则

    3-3-3原则 3秒钟 *思考三秒钟 沟通前根据交谈内容思考3秒钟,思考下具体需要表达什么,思考的主要点为What.Why.How. *冷静三秒钟 在沟通过程中,若遇到气氛不和谐,比如生气.愤恨等时, ...

  5. Linux的用户及权限相关

    sudo:用户想要使用sudo提升权限运行命令的话,需要把他加到sudo的list中 否则会报错:xxx is not in the sudoers file. 步骤 切换到root用户,运行visu ...

  6. WinForm中Button的使用

    自定义样式 先要清除系统风格影响:this.FlatStyle = FlatStyle.Flat; FlatStyle.Flat FlatStyle.System FlatStyle.Standard ...

  7. 【QTP专题】连接数据库

    获取数据库连接串 在本地新建一个.txt文件,修改扩展名名*.udl:双击*.udl文件,打开数据库链接属性,定位到"提供程序"选显卡,选中如sqlserver的连接  Micro ...

  8. java 实验3 继承+多态

    实验3  继承与多态 **类可以实现多个接口 但只有单继承!** 1.继承 1).继承语法  class 子类名 extends 父类{    } 2).构造函数(通过source即可得到) 注意: ...

  9. PHP中预定义超全局数组(变量)

    PHP中许多预定义变量都是“超全局的”,这意味着它们在一个脚本的全部作用域中都可用.超全局变量除了具有全局变量特点外,在函数或方法中无需执行global $variable:就可以访问它们. 提供超全 ...

  10. 子元素margin-top为何会影响父元素?

    子元素margin-top为何会影响父元素? 引用地址:https://blog.csdn.net/sinat_27088253/article/details/52954688 2016年10月28 ...