初步完成一个页面的数据爬取与写入数据库

import requests
import pymysql
from loguru import logger
from lxml import etreedb = pymysql.connect(host='localhost', port=3306, user='root', passwd='1234', db='db', charset='utf8')
logger.info("正在连接到数据库")
cursor = db.cursor()
cursor.execute("DROP TABLE IF EXISTS movie")sql = 'CREATE TABLE movie(name CHAR(255),year int,country char(255),director char(255),type CHAR(20),sorce char(20), ' \'notes char(255)) '
cursor.execute(sql)
logger.info("创建表格")def get_html():headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/92.0.4515.159 Safari/537.36'}url = 'https://movie.douban.com/top250'resp = requests.get(url, headers=headers)html = resp.textresp.close()return htmlif __name__ == '__main__':logger.info("执行主程序...")xhtml = etree.HTML(get_html())logger.info("...")names = xhtml.xpath('/html/body/div[3]/div[1]/div/div[1]/ol/li/div/div[2]/div[1]/a/span[1]/text()')logger.info("已完成电影名字的抓取...")notes = xhtml.xpath('/html/body/div[3]/div[1]/div/div[1]/ol/li/div/div[2]/div[2]/p[2]/span/text()')logger.info("已完成电影标语的抓取...")sorce = xhtml.xpath('/html/body/div[3]/div[1]/div/div[1]/ol/li/div/div[2]/div[2]/div/span[2]/text()')logger.info("已完成电影评分的抓取...")years = xhtml.xpath('/html/body/div[3]/div[1]/div/div[1]/ol/li/div/div[2]/div[2]/p[1]/text()[2]')logger.info("已完成电影年份,国家,类型的抓取...")# 获取下标,直接用字符串截取年份,国家,类型# print(years[0].index('1'))# for i in range(len(years)):#     print(years[i][29:33])# print(years[0].index('美'))# print(years[0][36:38])# 方法二 使用split("/")# print(years[0])# print(years[1])# print(years[1].split("/")[-1])directors = xhtml.xpath('/html/body/div[3]/div[1]/div/div[1]/ol/li/div/div[2]/div[2]/p[1]/text()[1]')logger.info("已完成电影导演的抓取...")# print(re.match(re.compile(r'\d{4}')),years[0])# for i  in range(len(directors)):#     print((directors[i].split(':')[1])[:-2])# 同时使用split("/")  和 字符串下标截取# print(directors[1])# print((directors[1].split(':')[1])[:-2])for i in range(len(sorce)):sql = "insert into movie(name,year,country,sorce,director,type,notes) values(%s,%s,%s,%s,%s,%s,%s)"par = (names[i], years[i][29:33], years[i].split("/")[-1],sorce[i],(directors[i].split(':')[1])[:-2], years[i].split("/")[-2],notes[i])cursor.execute(sql, par)db.commit()logger.info("数据已经写入表格中...")db.close()# class LinkMysql():
#     def __init__(self):
#         self.db = pymysql.connect(host='localhost', port=3306, user='root', passwd='1234', db='db', charset='utf8')
#         logger.info("正在连接到数据库")
#         self.cursor = self.db.cursor()

以上面为模板,找到豆瓣翻页后网址的规律,重新封装函数

去掉了note 字段

import requests
import pymysql
from loguru import logger
from lxml import etree
from faker import Fakerdb = pymysql.connect(host='localhost', port=3306, user='root', passwd='1234', db='db', charset='utf8')
logger.info("正在连接到数据库")
cursor = db.cursor()
cursor.execute("DROP TABLE IF EXISTS movie")sql = 'CREATE TABLE movie(name CHAR(255),year int,country char(255),director char(255),type varchar(255),score char(20)) '
cursor.execute(sql)
logger.info("创建表格")def get_xhtml(num=0):# 代理ip# ip_list = ['60.186.41.131:9000', '175.7.199.253:3256', '118.190.244.234:3128', '112.250.107.37:53281']# i = random.choice(ip_list)# proxy = {#     'http': i# }# print(proxy)# 随时改变UA# faker = Faker()headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) ''Chrome/92.0.4515.159 Safari/537.36','Accept': "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,""application/signed-exchange;v=b3;q=0.9 ",'origin': 'https://movie.douban.com'}url = f'https://movie.douban.com/top250?start={num}&filter='logger.info("正在发送请求...")resp = requests.get(url, headers=headers)logger.info("正在响应...")html = resp.textresp.close()xhtml = etree.HTML(html)return xhtmlif __name__ == '__main__':for i in range(10):logger.info("执行主程序...")xhtml = get_xhtml(25 * i)logger.info(f"-----正在抓取第{i + 1}页内容-----")names = xhtml.xpath('/html/body/div[3]/div[1]/div/div[1]/ol/li/div/div[2]/div[1]/a/span[1]/text()')print(names)logger.info("已完成电影名字的抓取...")notes = xhtml.xpath('/html/body/div[3]/div[1]/div/div[1]/ol/li/div/div[2]/div[2]/p[2]/span/text()')logger.info("已完成电影标语的抓取...")sorce = xhtml.xpath('/html/body/div[3]/div[1]/div/div[1]/ol/li/div/div[2]/div[2]/div/span[2]/text()')logger.info("已完成电影评分的抓取...")years = xhtml.xpath('/html/body/div[3]/div[1]/div/div[1]/ol/li/div/div[2]/div[2]/p[1]/text()[2]')logger.info("已完成电影年份,国家,类型的抓取...")directors = xhtml.xpath('/html/body/div[3]/div[1]/div/div[1]/ol/li/div/div[2]/div[2]/p[1]/text()[1]')logger.info("已完成电影导演的抓取...")for j in range(len(sorce)):print(names[j])print(years[j][29:33], years[j].split("/")[-1], sorce[j], (directors[j].split(':')[1])[:-2],years[j].split("/")[-2])sql = "insert into movie(name,year,country,score,director,type) values(%s,%s,%s,%s,%s,%s)"par = (names[j], years[j][29:33], years[j].split("/")[-1], sorce[j], (directors[j].split(':')[1])[:-2],years[j].split("/")[-2])cursor.execute(sql, par)db.commit()logger.info("数据已经写入表格中...")# db.close()

python爬虫豆瓣TOP250电影信息并写入数据库相关推荐

  1. [python爬虫] BeautifulSoup和Selenium对比爬取豆瓣Top250电影信息

    这篇文章主要对比BeautifulSoup和Selenium爬取豆瓣Top250电影信息,两种方法从本质上都是一样的,都是通过分析网页的DOM树结构进行元素定位,再定向爬取具体的电影信息,通过代码的对 ...

  2. 豆瓣Top250电影信息海报爬虫

    前些时候老师布置了一个小作业,让爬取豆瓣top250电影的相关信息,把每一部电影的信息以txt文本保存,并下载电影海报图片,一部电影创建一个文件夹. 代码编写分为如下几步 1.创建文件夹(我是在D盘先 ...

  3. python采用requests+bs4爬取豆瓣top250电影信息

    爬取豆瓣top250电影说明 (链接:https://movie.douban.com/top250,可爬取一页或者多页(输出电影的正标题(肖申克的救赎),副标题( The Shawshank Red ...

  4. 爬虫豆瓣TOP250电影数据

    今天是开通博客的第一天 目的 记录 爬取豆瓣TOP250电影数据 目的 我写博客的目的很简单,主要是想记录一些自己学习python的历程,后期包括一些其他方面的学习,目前在看唐松老师写的<Pyt ...

  5. 爬虫——豆瓣top250电影爬取实验

    1.获取头部 我们首先需要去到目标网址豆瓣top250上,点开'检查'选项,获取头部信息,具体见下图: 我们赋值user-agent和host的信息,这是一个爬虫隐身的最好方法. 于是有以下代码: h ...

  6. python爬虫获取双色球历史中奖纪录写入数据库

    from datetime import datetime import pymysql import requests import time import re import urllib.req ...

  7. Python爬虫实现热门电影信息采集

    这篇文章主要介绍了利用Python爬虫采集热门电影信息,文中示例代码很详细,具有一定的学习价值,感兴趣的小伙伴快来跟随小编一起学习吧. 目录 一.前言 二.前期准备 1.使用的软件 2.需要用的模块 ...

  8. Python爬取豆瓣Top250电影中2000年后上映的影片信息

    Python爬取豆瓣Top250电影中2000年后上映的影片信息 前言 双十一前加在京东购物车的一个东西,价格330,Plus会员用券后差不多310.双十一当天打开看了下399,还得去抢满300减10 ...

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

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

  10. Python爬虫豆瓣电影top250

      我的另一篇博客,Python爬虫豆瓣读书评分9分以上榜单   有了上次的基础,这次简单爬了下豆瓣上电影TOP250,链接豆瓣电影TOP250.   打开链接,查看网页源代码,查找我们需要的信息的字 ...

最新文章

  1. 我从吴恩达AI For Everyone中学到的10个重要AI观
  2. javascript内置顶层函数
  3. Android性能优化典范第六季
  4. 计算 1!+2!+3!+……+10!
  5. 技术实践:大规模知识图谱预训练及电商应用
  6. HDU1569 方格取数(2)(二分图带权最大独立集 - 最小割应用)
  7. shell脚本语之运算符
  8. consule服务注册和发现 安装 部署
  9. python下载-Python下载和安装图文教程[超详细]
  10. Mysql 8.0 | #08004Client does not support authentication protocol requested by server
  11. BeX5安装遇到问题
  12. 如何在WIN10 64位操作系统上安装STEP7 V5.5
  13. oracle sqldeveloper 115网盘 提取码
  14. 3D目标检测/点云/遥感数据集汇总
  15. 网络用语大扫盲?今天 你说了没?
  16. 记一次golang memory leak的解决过程
  17. Android Studio 连接不上华为手机
  18. Python+Django实现基于人脸识别的门禁管理系统,附带源码!!
  19. 开播4小时播放量破亿,《你是我的荣耀》为何能够大受好评?
  20. Android学习笔记——手机多媒体运用

热门文章

  1. vue form表单数据提交
  2. 【软件与系统安全】笔记与期末复习
  3. Hive报错Error during job, obtaining debugging information...
  4. STC51控制的超声波HY-SRF05测距、红外接收小车代码
  5. vue将图片链接、本地图片转为二进制文件流
  6. Touchgfx - 4 - Bitmap Cache
  7. 怎么用浏览器访问计算机文件共享,如何用ES文件浏览器完全共享电脑里的文件流程...
  8. 五项python小游戏代码测试
  9. 警告:integer division in floating-point context
  10. html 鼠标划过 ie导致白屏,win7系统IE浏览器网页出现白屏的解决方法