一、安装
python模块网站,应用文件放置在scrips下,whl:https://www.lfd.uci.edu/~gohlke/pythonlibs/
 
Scrapy框架依赖 Twistid需要再上边网站下载,放置scrips下;
   pip install C:\python\Anaconda3\Twisted-18.7.0-cp36-cp36m-win_amd64.whl
  pip install scrapy
二、创建Scrapy项目
1.由于pychram没有集成环境,需要执行命令创建,执行完,用pychram选择新窗口打开;
  

 scrapy startproject  projectname
 
2.创建爬虫文件执行命令如下:
    命令部分    文件名  爬取得网站
scrapy genspider baidu baidu.com
scrapy genspider -t crawl baidu baidu.com
 
3配置文件修改:
settings.py文件
 USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36 Maxthon/5.2.3.6000'

 # Obey robots.txt rules
ROBOTSTXT_OBEY = False
DOWNLOAD_DELAY = 3
ITEM_PIPELINES = {
'xiaoshuo_pc.pipelines.XiaoshuoPcPipeline': 300,
}
4运行程序:
 scrapy crawl name(变量值)
scrapy crawl name -o book.json(输出到文件{json、xml、csv})
scrapy crawl name -o book.json -t json(-t 代表格式输出,一般忽略)
**第一次运行的时候,我遇到no module named win32API错误,这是因为Python没有自带访问windows系统API的库的,需要下载第三方库。库的名称叫pywin32,可以从网上直接下载,下载链接:http://sourceforge.net/projects/pywin32/files%2Fpywin32/ (下载适合你的Python版本)下载后放置到scripts目录下双机运行,即可((或者pip install pypiwin32))
 
三、小说获取示例代码:
创建入口执行文件main.py
 from scrapy.cmdline import execute
execute("scrapy crawl zol".split()) # zol为zol文件中的变量定义的名
class ShiqikSpider(scrapy.Spider):
name = 'shiqik'
allowed_domains = ['17k.com']
start_urls = ['https://www.81zw.us/book/1379/6970209.html'] def parse(self, response):
title=response.xpath('//div[@class="bookname"]/h1/text()').extract_first()
content=''.join(response.xpath('//div[@id="content"]/text()').extract()).replace(' ','\n')
yield {"title":title,"content":content}
next_page=response.xpath('//div[@class="bottem2"]/a[3]/@href').extract_first()
if next_page.find(".html")!=-1:
print("继续下一个url")
new_url=response.urljoin(next_page)
yield scrapy.Request(new_url,callback=self.parse,dont_filter=True)
 
四、小说获取示例代码:
 

 class BayizhongwenSpider(CrawlSpider):
name = 'bayizhongwen'
allowed_domains = ['81zw.us']
# start_urls = ['https://www.81zw.us/book/1215/863759.html']
start_urls = ['https://www.81zw.us/book/1215'] rules = (
Rule(LinkExtractor(restrict_xpaths=r'//dl/dd[2]/a'), callback='parse_item', follow=True),
Rule(LinkExtractor(restrict_xpaths=r'//div[@class="bottem1"]/a[3]'), callback='parse_item', follow=True),
)
def parse_item(self, response):
title=response.xpath('//div[@class="bookname"]/h1/text()').extract_first()
content=''.join(response.xpath('//div[@id="content"]/text()').extract()).replace(' ','\n')
print({"title":title,"content":content})
yield {"title":title,"content":content}
 
 一、创建项目

 (venv) C:\Users\noc\PycharmProjects>scrapy startproject tupian
二、创建app
 (venv) C:\Users\noc\PycharmProjects\tupian>scrapy genspider zol zol.com.cn
三、修改配置信息
settings.py文件:
 # Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36' # Obey robots.txt rules
ROBOTSTXT_OBEY = False
DOWNLOAD_DELAY = 3 # Configure item pipelines
# See https://doc.scrapy.org/en/latest/topics/item-pipeline.html
ITEM_PIPELINES = {
# 'tupian.pipelines.TupianPipeline': 300,
'scrapy.contrib.pipeline.images.ImagesPipeline': 300,
}
# 增加图片存放目录
IMAGES_STORE='e:/img'
 
四、创建入口执行文件start.py
 from scrapy.cmdline import execute
execute("scrapy crawl zol".split()) # zol为zol文件中的变量定义的名

五、主文件代码:

 import scrapy

 class ZolSpider(scrapy.Spider):
name = 'zol'
allowed_domains = ['zol.com.cn']
start_urls = ['http://desk.zol.com.cn/bizhi/7239_89590_2.html'] # 爬取图片页面的地址 def parse(self, response):
image_url = response.xpath('//img[@id="bigImg"]/@src').extract() # 爬取第一张图片的地址
image_name = response.xpath('string(//h3)').extract_first() # 爬取图片名称
yield {"image_url": image_url, "image_name": image_name} # 推送
next_page = response.xpath('//a[@id="pageNext"]/@href').extract_first() # 爬取图片下一张按钮的地址
if next_page.find('.html') != -1: # 判断最后一张图片地址如果不包含.html
yield scrapy.Request(response.urljoin(next_page), callback=self.parse)
 
六、middlewares文件

 from tupian.settings import USER_AGENT
from random import choice
from fake_useragent import UserAgent # User-Agent设置
class UserAgentDownloaderMiddleware(object):
def process_request(self, request, spider):
# if self.user_agent:
# request.headers.setdefault(b'User-Agent',choice(USER_AGENT))
request.headers.setdefault(b'User-Agent', UserAgent().random) # 代理设置
class ProxyMiddleware(object):
def process_request(self, request, spider):
# request.meta['proxy']='http://ip:port'
request.meta['proxy']='http://124.235.145.79:80'
# request.meta['proxy']='http://user:passwd@ip:port'
# request.meta['proxy']='http://398707160:j8inhg2g@139.224.116.10:16816'


scrapy框架初级的更多相关文章

  1. Python爬虫进阶三之Scrapy框架安装配置

    初级的爬虫我们利用urllib和urllib2库以及正则表达式就可以完成了,不过还有更加强大的工具,爬虫框架Scrapy,这安装过程也是煞费苦心哪,在此整理如下. Windows 平台: 我的系统是 ...

  2. Python爬虫进阶之Scrapy框架安装配置

    Python爬虫进阶之Scrapy框架安装配置 初级的爬虫我们利用urllib和urllib2库以及正则表达式就可以完成了,不过还有更加强大的工具,爬虫框架Scrapy,这安装过程也是煞费苦心哪,在此 ...

  3. Python爬虫Scrapy框架入门(2)

    本文是跟着大神博客,尝试从网站上爬一堆东西,一堆你懂得的东西 附上原创链接: http://www.cnblogs.com/qiyeboy/p/5428240.html 基本思路是,查看网页元素,填写 ...

  4. Python爬虫Scrapy框架入门(1)

    也许是很少接触python的原因,我觉得是Scrapy框架和以往Java框架很不一样:它真的是个框架. 从表层来看,与Java框架引入jar包.配置xml或.property文件不同,Scrapy的模 ...

  5. Scrapy框架使用—quotesbot 项目(学习记录一)

    一.Scrapy框架的安装及相关理论知识的学习可以参考:http://www.yiibai.com/scrapy/scrapy_environment.html 二.重点记录我学习使用scrapy框架 ...

  6. Python爬虫从入门到放弃(十一)之 Scrapy框架整体的一个了解

    这里是通过爬取伯乐在线的全部文章为例子,让自己先对scrapy进行一个整理的理解 该例子中的详细代码会放到我的github地址:https://github.com/pythonsite/spider ...

  7. Python爬虫从入门到放弃(十二)之 Scrapy框架的架构和原理

    这一篇文章主要是为了对scrapy框架的工作流程以及各个组件功能的介绍 Scrapy目前已经可以很好的在python3上运行Scrapy使用了Twisted作为框架,Twisted有些特殊的地方是它是 ...

  8. python爬虫scrapy框架——人工识别登录知乎倒立文字验证码和数字英文验证码(2)

    操作环境:python3 在上一文中python爬虫scrapy框架--人工识别知乎登录知乎倒立文字验证码和数字英文验证码(1)我们已经介绍了用Requests库来登录知乎,本文如果看不懂可以先看之前 ...

  9. 一个scrapy框架的爬虫(爬取京东图书)

    我们的这个爬虫设计来爬取京东图书(jd.com). scrapy框架相信大家比较了解了.里面有很多复杂的机制,超出本文的范围. 1.爬虫spider tips: 1.xpath的语法比较坑,但是你可以 ...

随机推荐

  1. CentOS 7 配置Tomcat9连接MySQL

    配置Tomcat 首先安装Tomcat 安装Tomcat分为安装Tomcat和安装JDK两个步骤 JDK( Java Development Kit ) 是Sun Microsystems针对Java ...

  2. Poj1979 Red and Black (DFS)

    Red and Black Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 47466   Accepted: 25523 D ...

  3. 知识点补充 set 深浅拷贝

    一 对前面知识点的补充 1.str中的join()方法是将列表转换成字符串 lst = ["韩雪","赵丽颖","黄渤","李连杰 ...

  4. nodejieba中文分词

    var nodejieba = require("nodejieba"); console.log(nodejieba.extract("升职加薪,当上CEO,走上人生巅 ...

  5. 从数据库取出两个同样的字符串用equals比较返回false

    1. 从网上搜索原因,大概总结为三点 1.1 取数据的两个数据库编码不一样,需要统一编码 1.2 字符类型不一样,可能一个为nchar一个为varchar 1.3 从数据库取出的数据有空格,需要tri ...

  6. Maven Web Project设置Webcontent路径

    1,新建maven-archetype-webapp 2,右键项目-->Properties-->选中Project Facets中的Runtimes标签,然后Java版本改为1.8,Dy ...

  7. chrome内核浏览器插件的使用--Tampermonkey(油猴插件)

    Tampermonkey(油猴插件),这个插件是一个用于改造你浏览器打开的网站的插件.它可以在你打开的网页中注入任意js脚本,以达到你想要的外加功能.可以说非常不错.很多时候也值得使用. 这是个chr ...

  8. 搭建一个Web Server站点

    题:搭建一个Web Server站点.安装web服务,并在本地创建index.html测试 1.安装http服务 yum -y install httpd 2.进入网站目录 cd /var/www/h ...

  9. js前端文件收集(一)

    1.保存cookies的文件: /** * Cookie plugin * * Copyright (c) 2006 Klaus Hartl (stilbuero.de) * Dual license ...

  10. freeswitch 显示主叫名称和主叫号码

    1.指定主叫号码 origination_caller_id_number 参数来指定显示的主叫号码 2.指定主叫名称 origination_caller_id_name 参数来指定显示的主叫名称 ...