在信息如海的今天,学会从网页中提取并妥善保存数据,实用性极高。今天,我将分步演示,如何将经典电影按地区分类的信息成功采集,并存入MySQL数据库。
搭建基本框架和爬虫程序
踏上数据探索之旅,得先建立框架和编写爬虫。这相当于盖楼前得打好地基。在适宜的编程环境中,构建我们的爬虫框架体系。根据需求设定好基础参数,这对后续工作的顺利进行至关重要。有了这个框架,我们便能有序推进后续工作。
接下来是进行环境配置的步骤。需要调整好支撑爬虫程序运行的各项环境,保证所有必需的库都能顺畅执行。环境一旦稳定,所编写的爬虫程序便能在实际网络环境中发挥其作用。
定义核心脚本
对 .py
文件的定义十分关键,它就像是给爬虫程序赋予了一个独特的标识。合理地按照规则命名和组织这些核心代码文件,能让项目结构更加清晰易懂。每个 .py
文件都有其特定的作用。
编写代码时,务必关注代码的规范和注释的详尽。规范的代码和详尽的注释有助于我们后续的故障排查和功能优化。特别是注释,它能够帮助我们迅速把握代码的用途和设计初衷。即便时间过去,再次审视时,也能一目了然。
编写爬虫程序
编写爬虫代码于movie.py
文件中至关重要,这是数据抓取流程中的关键环节。我们旨在搜集经典电影类别中,包括国内、日韩、欧美电影的第一页详细信息。需依据网页HTML结构编写相应代码,运用选择器精确锁定所需数据。通过调用网络请求库发送请求,以获取网页内容。
# -*- coding: utf-8 -*-
import scrapy
from ..items import YanguangItem
class MovieSpider(scrapy.Spider):
name = 'movie'
allowed_domains = ['ygdy8.com']
# 更改初始的url,此网址为经典影片的网址
start_urls = ['http://www.ygdy8.com/html/gndy/index.html']
# 获取‘更多’选项的链接,(只获取国内,日韩,欧美三个分类)
def parse(self, response):
info_list=response.xpath('//div[@class="title_all"]/p/em/a/@href').extract()[:3]
for info in info_list:
# 拼接完整的‘更多’网址
info='http://www.ygdy8.com'+info
yield scrapy.Request(url=info,callback=self.get_movie_url)
# 获取每部电影进入详情页的网址
def get_movie_url(self,response):
movie_url=response.xpath('//a[@class="ulink"][2]/@href').extract()
for movie in movie_url:
# 拼接完整的url
movie='http://www.ygdy8.com'+movie
yield scrapy.Request(url=movie,callback=self.get_content_in_url)
# 获取每部电影的名字,以及他们的下载链接
def get_content_in_url(self,response):
mov_name=response.xpath('//div[@class="title_all"]/h1/font/text()').extract_first('')
print(mov_name)
mov_href=response.xpath('//td[@style="WORD-WRAP: break-word"]/a/@href').extract_first('')
print(mov_href)
print('------------------------------------------------------------')
item=YanguangItem()
item['mov_name']=mov_name
![图片[1]-使用Scrapy框架爬取电影数据并存储到MySQL数据库的完整教程-东山笔记](https://83ch.com/wp-content/themes/zibll/img/thumbnail-lg.svg)
item['mov_href']=mov_href
yield item
编写时还需注意反爬虫技术。不同网站的反爬策略各异,需灵活调整爬虫代码,例如设定恰当的请求头部、调节请求速率等,以防被网站识别为爬虫导致被封。
定义数据结构
import scrapy
class YanguangItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
mov_name=scrapy.Field()
mov_href=scrapy.Field()
pass
items.py
文件是用来设定数据框架的。就好比设计一个储物盒,规定每个格子的用途。我们需明确从详情页获取的电影名字和下载链接的存放方式及展示形式。确保在爬取数据时,收集到的信息能按照既定格式进行有序整理。
在设定数据结构时,需关注数据种类的挑选。需考虑是采用字符串、整数还是其他形式,需依据实际需要作出恰当选择,以保证各类信息能被准确无误地保存。
建立 MySQL 数据库和表格
进入数据存储阶段,得先搭建 MySQL 数据库和表格。启动 .exe
文件,进入主界面,开始创建数据和表格。我打算创建一个叫 Movie
的数据库,并在其中设立一个表格,包含 name
和 href
两个字段。同时,需要将表格编码格式改为 utf - 8
,以避免字符显示乱码问题。
制作表格需注意各字段特性。例如,name
字段长度应适应可能出现的电影名字长度,而 href
字段需确保能容纳完整的下载链接。表格创建完毕后,可进行基础测试,核实设置是否准确。
连接数据库并写入数据
在 .py
文件里,我们要自己编写代码来连接数据库并录入信息。这涉及到调用MySQL的驱动程序,建立与数据库的连接,并将我们之前爬取和整理的数据精确地存入我们创建的表格。在这个过程中,我们要注意很多细节,比如确保数据的合法性。
数据写入完毕后,需在终端输入crawl movie
指令。操作结束后,点击红色圆形图标进行刷新。若看到期望的数据,则表示数据存储成功。随后,应仔细核对数据的完整性和准确性。若发现问题,应立即检查代码及连接状况。
在使用过程中,大家觉得哪个环节最容易出现问题?若觉得本文对您有所帮助,请记得点赞并转发!
# -*- coding: utf-8 -*-
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
import pymysql
class YanguangPipeline(object):
def __init__(self):
# 连接MySQL数据库
self.connect=pymysql.connect(host='localhost',user='root',password='123456',db='Movie',port=3306)
self.cursor=self.connect.cursor()
def process_item(self, item, spider):
# 往数据库里面写入数据
self.cursor.execute('insert into movieTable(name,href)VALUES ("{}","{}")'.format(item['mov_name'],item['mov_href']))
self.connect.commit()
return item
# 关闭数据库
def close_spider(self,spider):
self.cursor.close()
self.connect.close()