说一下我的爬取过程吧

第一步: 当然是 scrapy startproject  + 名字   新建爬虫项目

第二步:  scrapy genspider -t crawl +爬虫名字+ 所爬取网站的域名      (-t crawl是全站爬虫)

第三步:

spider文件下的代码
import scrapy
import re
from scrapy.linkextractors import LinkExtractor # 链接提取器
from scrapy.spiders import CrawlSpider, Rule # 导入全站爬虫和采集规则 class Ygdy8Spider(CrawlSpider):
name = 'ygdy8' # 爬虫名字
allowed_domains = ['www.ygdy8.com'] # 爬虫只在该域名下爬取数据
start_urls = ['http://www.ygdy8.com/'] # 开始采集的网址
# 采集规则集合
rules = (
# 具体采集的规则
# allow 是选择出所有带有index的网址 allow是正则表达式 只要写你想提取的链接的一部分就可以了, deny是不允许提取的
Rule(LinkExtractor(allow=r'index.html', deny='game')),
# follow=true 意思是下一次提取的网页中如果包含我们需要提取的信息,是否还要继续提取,True代表继续提取
Rule(LinkExtractor(allow=r'list_\d+_\d+.html'), follow=True),
# 提取详情页信息 callback 回调函数, 将相应交给这个函数来处理
Rule(LinkExtractor(allow=r'/\d+/\d+.html'), follow=True, callback='parse_item'),
) # 解析采集回来的数据
def parse_item(self, response): # 处理网页数据,提取下载链接
# .*?代表提取除了换行以外的任何信息
ftp_url = re.findall(r'<a href="(.*?)">ftp', response.text)
name = re.findall(r'<title>(.*?)</title>', response.text)
if ftp_url and name:
items = {
'name': name,
'ftp_url': ftp_url
}
yield items
管道文件
import json
import os
import csv class JsonPipeline(object):
def __init__(self):
self.file = open('阳光电影.json', 'w+', encoding='utf-8') def open_spider(self, spider):
self.file.write('[') def process_item(self, item, spider):
line = json.dumps(dict(item), ensure_ascii=False) + ",\n"
self.file.write(line)
return item def close_spider(self, spider):
self.file.seek(-1, os.SEEK_END)
self.file.truncate()
self.file.write(']')
self.file.close() class CsvPipeline(object):
def __init__(self):
self.f = open("阳光电影.csv", "w", newline='')
self.writer = csv.writer(self.f)
self.writer.writerow(['name', 'ftp_url']) def process_item(self, item, spider):
yangguang_list = [item['name'], item['ftp_url']]
self.writer.writerow(yangguang_list)
return item
settings
ITEM_PIPELINES = {
'movie.pipelines.JsonPipeline': 300,
'movie.pipelines.CsvPipeline': 300,
}

最后执行爬虫代码  scrapy crawl + 爬虫名字

最新文章

  1. html5 炫酷的字幕雨
  2. Android开源框架:Universal-Image-Loader解析(三)DiskCache
  3. NYOJ--1237最大岛屿
  4. 《OD学hadoop》第四周0716
  5. AngularJS中在前后端分离模式下实现权限控制 - 基于RBAC
  6. 基于bootstrap3的 表格和分页的插件
  7. javascript moveTo() 函数
  8. SuperSocket使用demo
  9. c语言二维数组变色龙之死字的打印
  10. eclipse设置web项目发布到tomcat根目录下
  11. More Divisors(反素数)
  12. 2.Perl 多线程:Threads(线程返回值)
  13. python爬取煎蛋网图片
  14. open_basedir restriction in effect.文件访问没有权限异常
  15. K:二叉树的非递归遍历
  16. Excel和Word 简易工具类,JEasyPoi 2.1.5 版本发布
  17. spark报错:warn util.utils::service &#39;sparkUI&#39; can not bind on part 4040.Attempting port 4041.
  18. 解决InetAddress.isReachable(timeout)在windows xp始终返回false的bug
  19. HDU2476 String painter——区间DP
  20. @PathVariable与@RequestBody的区别,及前段请求接口的写法。

热门文章

  1. rke安装k8s cluster配置
  2. 1032 Sharing (25分)
  3. java.lang.NoClassDefFoundError: org/apache/commons/lang/exception/NestableRuntimeException
  4. Jenkins - 基于 Docker 的 Jenkins 安装
  5. (c#)拼写单词
  6. JavaScript中的 typeof,null,和undefined
  7. 每天进步一点点------verilog语言实现的分频
  8. TCP协议的3次握手与4次挥手过程【深度详解】
  9. Unity小知识点大全(二)
  10. bugku 本地包含