- 【实验目的】
- 【实验原理】
- 【实验环境】
- 【实验内容】
- 【实验步骤】
- 1.打开终端模拟器,创建一个目录/data,密码:zhangyu,创建一个名为douban的Scrapy项目。
- 2.打开Pycharm,选择File中的Open,打开douban项目。
- 3.在终端模拟器中,切换到douban目录中,创建Spidier。
- 4.接下来我们需要编写doubanspider的代码,实现爬取电影中的标题、评分及简介。
- 5.选择setting.py文件,将其中的ROBOTSTXT_OBEY参数由True改为False。
- 7.最后,我们在main.py文件中,执行Run ‘main’。
- 9.查看douban.csv文件。
- 10.启动mysql服务。
- 11.启动mysql(密码:strongs)
- 15.将/data/douban/目录中的douban.csv文件传入mysql中的doubantb中。
- 16.查看前十条数据
【实验目的】
1.练习爬取电影信息
2.练习将爬取到的数据存入Mysql数据库中
【实验原理】
网络爬虫是指在网上进行数据抓取的程序,用来抓取特定网页的HTML数据。虽然可以利用一些库开发一个爬虫程序,但是使用框架可以大大提高效率,缩短开发时间。Scrapy是一个使用Python编写的,轻量级的,简单轻巧,并且使用起来非常的方便。Scrapy是一套基于Twisted的异步处理框架,是纯python实现的爬取框架,用户只需要定制开发几个模块就可以轻松实现一个爬虫,用来抓取网页内容或者各种图片。
本节课以Scrapy框架爬取TOP250的电影信息,首先我们分析源码,我们发现所有信息都放在一个单独的li标签中,而且在li下还有一个class为’item’的div包裹着所有的信息,我们取其中的评分、电影名和简介。
由于每页只能显示25条数据,我们还需判断是否存在下一页,如果存在则继续爬取,最后完成爬取10页共250条数据。
【实验环境】
Linux Ubuntu 16.04
Python 3.5
PyCharm
Scrapy
mysql-5.5.53
【实验内容】
1.使用Scrapy框架爬取top250中的电影信息
2.设计mysql中的表,将爬取到的数据存入mysql中
【实验步骤】
1.打开终端模拟器,创建一个目录/data,密码:zhangyu,创建一个名为douban的Scrapy项目。
sudo mkdir /data
sudo chown -R zhangyu.zhangyu /data
cd /data
scrapy startproject douban
2.打开Pycharm,选择File中的Open,打开douban项目。
3.在终端模拟器中,切换到douban目录中,创建Spidier。
这里我们要爬取movie.douban.com中的文章。
cd /data/douban
scrapy genspider doubanspider http://192.168.1.100:40000/douban
我们可以看到spiders中的doubanspider已经创建出来了。
4.接下来我们需要编写doubanspider的代码,实现爬取电影中的标题、评分及简介。
完整代码为:
import scrapy
class doubanspider(scrapy.Spider):
#项目名
name = "doubanspider"
#当网站设置了防爬措施,我们需要加上headers伪装浏览器发送请求,不添加以下信息将爬取不到数据
headler = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 '
'Safari/537.36',
'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8'
}
#目标网站的url
start_urls = [
'http://192.168.1.100:40000/douban'
]
#重写scrapy方法
def start_requests(self):
for i in range(1, 11):
oneurl = "http://192.168.1.100:40000/douban/" + str(i)
yield scrapy.Request(url=oneurl, callback=self.parse, headers=self.headler)
#使用css选择器,通过for循环遍历电影标题、评分及简介
def parse(self, response):
for quote in response.css('div.item'):
yield {
"film_name": quote.css('div.info div.hd a span.title::text').extract_first(),
"score": quote.css('div.info div.bd div.star span.rating_num::text').extract(),
"Introduction": quote.css('div.info div.bd p.quote span.inq::text').extract()
}
5.选择setting.py文件,将其中的ROBOTSTXT_OBEY参数由True改为False。
from scrapy import cmdline
name='doubanspider -o douban.csv'
cmd = 'scrapy crawl {0}'.format(name)
cmdline.execute(cmd.split())
7.最后,我们在main.py文件中,执行Run ‘main’。
我们可以看到,爬取到的数据正源源不断的输出。
8.我们可以在/data/douban中查看到生成的douban.csv文件。
ls /data/douban
9.查看douban.csv文件。
cat /data/douban/douban.csv
接下来,我们开启mysql数据库,将douban.csv文件传入mysql中。(密码:zhangyu)
10.启动mysql服务。
sudo service mysql start
11.启动mysql(密码:strongs)
mysql -u root -p
CREATE DATABASE douban CHARACTER SET utf8 COLLATE utf8_general_ci;
use douban;
13.创建doubantb表,包含电影名(film_name),字符类型为varchar(10),评分(score),字符类型为varchar(10),评价(Introduction),字符类型为longtext,doubantb表中三个字段的顺序须与douban.csv中数据字段的顺序保持一致。
create table doubantb
(
score varchar(10) ,
Introduction longtext ,
film_name varchar(10) not null
);
desc doubantb;
15.将/data/douban/目录中的douban.csv文件传入mysql中的doubantb中。
load data infile '/data/douban/douban.csv' into table doubantb fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by '\r\n';
16.查看前十条数据
select * from doubantb limit 10;