Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

Scrapy

适合模版式的页面结构爬虫,效率较高;对于模版化的页面布局,只需要指出模版需要的每个标签元素,即可一次性抓取。

例如: http://quotes.toscrape.com/tag/humor/

安装:

#pip install scrapy

命令行创建工程:

scrapy startproject <project_name> [project_dir]
#scrapy startproject myproject dir
会在 'dir' 目录(如果没有,则会自动创建一个跟'myproject'同名的目录)下,生成固定格式和目录结构的项目,例如此处的 auto_cmd_project 项目;

创建一个Spider(统一目pj下可以创建多个spider):
scrapy genspider [-t template] <name> <domain>
#scrapy genspider spname domain.com

运行:

#scrapy runspider xxx.py

输出数据成文件 (支持 .json .jl .xml 等格式)

#scrapy runspider xxx.py -o filename.json  

注意: 由于历史原因,Scrapy会'附加'到给定文件而不是'覆盖'其内容。如果在第二次之前没有删除文件的情况下运行此命令两次,则最终会出现损坏的JSON文件。

实时交互:(通过这种方式方便判和确定断抓取到的界面元素标签)

#scrapy shell $url
例如:
#scrapy shell 'http://quotes.toscrape.com/page/1/' 

两种方式获取元素(标签选择器):

关于xpath的更多实用细节: https://docs.scrapy.org/en/latest/topics/selectors.html#topics-selectors

1。css (实际上scrapy底层还是将其转化为后者xpath)
    获取元素:   response.css('title')
    获取元素文字内容:response.css('title::text').get()
    
2。xpath    
    获取元素:   response.xpath('//title')
    获取元素文字内容:response.xpath('//title/text()').get()
    
    get()        获取单个元素内容(string)
    getall()     获取所有的(array)
    re(r'Quotes.*') 正则匹配(array)

3.获取属性元素
    ::attr(xxx)
    eg: res.css('div.next a::attr(href)').get()
    
    attrib['xxx']
    eg: res.css('div.next a').attrib['href']