时间2019年6月1号
本次使用scrapy爬取电影天堂,现在改名成为阳光的电影了。
创建全栈爬虫,我也是第一次听说整个名字
正文开始
1 创建全栈爬虫项目:
(1) scrapy startproject ygdy85Spider
(2) cd ygdy85Spider
(3) scrapy genspider -t crawl ygdy8 ygdy8.net
项目文件创建完成,图片如下:
定义爬虫。1在spiders文件夹下面的ygdy8.py进行定义
import scrapy
import re
from scrapy.linkextractors import LinkExtractor # 链接提取器
from scrapy.spiders import CrawlSpider, Rule # 全栈爬虫和采集规则
class Ygdy8Spider(CrawlSpider):
name = 'ygdy8' #爬虫名字
allowed_domains = ['ygdy8.net'] # 域名限制可爬取的范围
start_urls = ['http://ygdy8.net/'] # 开始采集网址
# 采集规则的集合
rules = (
# 具体实现的采集规则
# 采集导航页电影的部分,allow是选择出所有带有index的网址,allow为正则表达式的书写规则
Rule(LinkExtractor(allow=r'index.html',deny='game')), #不允许采集那些网址站
# fellow 下一次提取的网页中如果包含我们需要提取的信息,是否继续提取
Rule(LinkExtractor(allow=r"list_\d+_\d+.html"),follow=True),
# allow 提取详情页,callback回调函数 ,将响应交给对应函数
Rule(LinkExtractor(allow=r'/\d+/\d+.html'),callback='parse_item', follow=True),
)
# 解析数据
def parse_item(self, response):
# i = {}
#i['domain_id'] = response.xpath('//input[@id="sid"]/@value').extract()
#i['name'] = response.xpath('//div[@id="name"]').extract()
#i['description'] = response.xpath('//div[@id="description"]').extract()
# return i
ftp_url = re.findall('<a href="(.*?)">ftp',response.text)
print(ftp_url)
yield ftp_url # 返回字典格式
此网站暂时没有反爬措施。或许是我采集的连接没有反爬措施。最后的yield部分可以粗糙的改成进行保存。
with open ("ygdy8.txt",newline="",encoding="utf-8") as file:
file.write(ftp_url)
一般来说,比较正统的保存技术是在pipelines.py文件中进行保存。在里面定义链接我们的数据库。引入相应的模块。当然就需要使用到yield.还有items定义好需要提取的数据字段。