python爬虫拉取豆瓣Top250数据

利用request和正则表达式抓取豆瓣电影Top250的相关内容,提取出电影的名称、时间、评分和图片等信息,提取的站点url为https://movie.douban.com/top250,提取的结果以数据库和文本文件保存。

  1. 导入包
import json
import requests
from requests.exceptions import RequestException
import re
import time
import pymysql
  1. 相关配置,传入url参数,抓取页面结果返回
def get_one_page(url):try:headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.162 Safari/537.36'}response = requests.get(url, headers=headers)if response.status_code == 200:return response.textreturn Noneexcept RequestException:return None
  1. 获取页面并解析相关数据,用正则表达式匹配电影的信息,如电影名、评分、电影海报、导演、主角和上映年份等,并赋值为字典,形成结构化数据。
def parse_one_page(html):pattern = re.compile('<li>''.*?<em class="">(.*?)</em>''.*?src="(.*?)" ''.*?title">(.*?)</span>'# '.*?average">(.*?)</span>'# '.*?导演: (.*?)&nbsp'# '.*?主演: (.*?)...<br>'# '<br>\n(\d+)''.*?<br>.*?(\d+)'# '.*?/&nbsp;(.*?)&nbsp;/'# '.*?\d+&nbsp;/&nbsp;.*?&nbsp;/&nbsp;(.*?)\n''.*?inq">(.*?)</span>''.*?</li>', re.S)items = re.findall(pattern, html)for item in items:yield {'id': item[0],'image': item[1],'name': item[2],# 'score': item[3],# 'actor': item[4],# 'star': item[3],'year': item[3],# 'country': item[7],# 'kind': item[8],'inq': item[4]}# time.sleep(1)
  1. 将数据写入文本文件,通过JSON库的dumps()方法实现字典的序列化
def write_to_file(content):with open('D:/result.txt', 'a', encoding='utf-8') as f:f.write(json.dumps(content, ensure_ascii=False) + '\n')
  1. 将数据写入数据库
def write_to_mysql(item):db = pymysql.connect(host='localhost', user='root', passwd='xjz01405', db='test', port=3306)cursor = db.cursor()cursor.execute('SELECT VERSION()')data = cursor.fetchone()print('Database version:', data)table = 'movies'keys = ', '.join(item.keys())values = ', '.join(['%s'] * len(item))sql = 'INSERT INTO {table}({keys}) VALUES ({values})'.format(table=table, keys=keys, values=values)try:if cursor.execute(sql, tuple(item.values())):print('sucessful')db.commit()except:print('failed')db.rollback()# db.close()
  1. 主函数,调用之前实现的方法,将电影数据写入数据库和文件中
def main(offset):url = 'https://movie.douban.com/top250?start=' + str(start) + '&filter='html = get_one_page(url)# print(html)for item in parse_one_page(html):print(item)write_to_mysql(item)update_to_mysql(item)write_to_file(item)
  1. 页面跳转,给主函数内的url传入start参数,实现全部250条数据的爬取
if __name__ == '__main__':for i in range(2, 3):main(start=i * 25)time.sleep(2)

结果:

  • 文本文档

  • 数据库

  1. 更新数据,如果有新的数据就插入数据,如果数据已经存在数据库中,就更新数据,通过比较主键判断是否存在,实现主键不存在就插入数据,若存在就更新数据。
def update_to_mysql(item):db = pymysql.connect(host='localhost', user='root', passwd='xjz01405', db='test', port=3306)cursor = db.cursor()table = 'movies'keys = ', '.join(item.keys())values = ', '.join(['%s'] * len(item))sql = 'INSERT INTO {table}({keys}) VALUES ({values}) ON DUPLICATE KEY UPDATE'.format(table=table, keys=keys, values=values)# sql = 'UPDATE {table} 'update = ','.join([" {key} = %s".format(key=key) for key in item])sql += updatetry:if cursor.execute(sql, tuple(item.values())*2):print('sucessful')db.commit()except:print('failed')db.rollback()# db.close()

python爬虫拉取豆瓣Top250数据相关推荐

  1. Python爬虫爬取豆瓣TOP250和网易云歌单

    python爬虫(网易云)笔记 @(python学习) 先推荐看一下b站的视频链接如下:https://www.bilibili.com/video/BV12E411A7ZQ?from=search& ...

  2. python爬虫爬取豆瓣top250电影影评

    信息系统课程项目,小组准备做一个电影推荐系统,自己选了觉得很有趣的资源模块,需要获取电影的评价资源等信息.花了大约一周看Web Scraping with Python这本书,对爬虫有了大体但是初略的 ...

  3. python爬虫——爬取豆瓣TOP250电影

    相信很多朋友在看一部电影的时候喜欢先去豆瓣找一下网友对该片的评价.豆瓣作为国内最权威的电影评分网站,虽然有不少水军和精日精美分子,但是TOP250的电影还是不错的,值得一看. 爬取目标 本文将爬取豆瓣 ...

  4. Python爬虫爬取豆瓣书籍数据

    "   阅读文本大概需要 5 分钟 此文首发于「brucepk」公众号,欢迎大家去关注. 炎热的夏天,酷暑难挡,难免会心烦意燥,睡前随手拿起枕边看过很多遍的「平凡的世界」.看书,会让躁动的心 ...

  5. python爬虫--爬取豆瓣top250电影名

    关于模拟浏览器登录的header,可以在相应网站按F12调取出编辑器,点击netwook,如下: 以便于不会被网站反爬虫拒绝. 1 import requests 2 from bs4 import ...

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

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

  7. python爬虫爬取豆瓣读书Top250

    python爬虫爬取豆瓣读书Top250 话不多说,直接上代码! from urllib.request import urlopen, Request from bs4 import Beautif ...

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

    爬虫爬取豆瓣Top250 文章目录 爬虫爬取豆瓣Top250 完整代码 第一步获取整个网页并以html来解析 正则表达式来匹配关键词 所有信息写入列表中 存入Excel中 效果如图 本文学习自B站UP ...

  9. python爬虫爬取豆瓣电影排行榜并通过pandas保存到Excel文件当中

    我们的需求是利用python爬虫爬取豆瓣电影排行榜数据,并将数据通过pandas保存到Excel文件当中(步骤详细) 我们用到的第三方库如下所示: import requests import pan ...

最新文章

  1. python selenium自动化断言_python+selenium自动化登录测试,设计不同场景进行登录,两种方式断言,截图保存...
  2. 人人可用的在线抠图,还是AI自动化的那种!北大校友的算法被玩出新高度
  3. 怎么做网络推广浅析有关404页面优化的技巧
  4. lly dependent on columns in GROUP BY clause; this is incompatible with sql_m
  5. Java---定义一个圆(Circle)类表示三维空间中的圆(两个成员变量:圆心Point类、半径)
  6. 第二章 PX4-RCS启动文件解析
  7. jquery与ajax的XMLHttpRequest对象介绍
  8. how2java_HOW-TO:在Spring 4和Java 7中使用@PropertySource批注
  9. Android App性能測试
  10. 程序员造轮子的正确姿势
  11. Vue-cli(四) 项目中引入Axios
  12. 美国自动驾驶研发国家队NASA入局,还提供了航天跑道做测试
  13. mysqld got signal 11处理
  14. 现金支票打印模板excel_好用的支票打印软件
  15. 8g内存一般占用多少_手机6G和8G运存有什么不同,8G运存真比6G流畅?这也要考虑处理器...
  16. 基于SSM实现的在线音乐网站【附源码】(毕设)
  17. 最新最全论文合集——CCS 历年最佳论文汇总
  18. FileStatus类介绍
  19. 图像处理保研面试_北航信息与通信工程方向保研面试题集
  20. 谭谭牛顿的牛眼之人眼是红外线成像仪谭

热门文章

  1. 槽函数会被执行多次的问题原因及解决方法
  2. f1 score 代码_腾讯广告算法大赛冠军代码解读:稠密特征工程
  3. mailcore -- Mail port
  4. 如何正确区分cssci和核心期刊
  5. [20180808]exists and not exists.txt
  6. 竞赛准备篇---(一)抽签问题
  7. 科普向--详解JavaScript中的数据类型
  8. 在LINQ to SQL中使用Translate方法以及修改查询用SQL
  9. 【scala初学】scala 控制 for while match if
  10. Jni Helloworld