博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python的scrapy框架学习ing
阅读量:6376 次
发布时间:2019-06-23

本文共 2650 字,大约阅读时间需要 8 分钟。

大家可能都会爬虫,可能都有各自的爬虫工具,但是我觉得如果要靠爬虫吃饭,python的scrapy这个框架还是需要学习一下的,这两天看了一下这个文档,发现效率还是不错的,分布式爬虫,代码量还很少的,效率还是很高的。

开发平台:centos 7

python版本:python3.6

第一步:要使用这个第一步肯定是安装scrapy啦

pip3 install scrapy

 

第二步:写代码之前一般要干嘛,当然是要新建工程,拿来放置你编写的代码,使用startproject 创建一个scrapy的工程,然后进入这个工程

scrapy startproject ja cd ja

 

然后你输入ls,之后会看到两个文件,一个是你以后放置代码的文件ja(该项目的python模块。之后您将在此加入代码),一个就是scrapy的配置文件cfg( 项目的配置文件)

然后这个时候我们在输入 cd ja

 

 

  • tutorial/items.py: 项目中的item文件.
  • tutorial/pipelines.py: 项目中的pipelines文件.
  • tutorial/settings.py: 项目的设置文件.
  • tutorial/spiders/: 放置spider代码的目录.

 

然后我们cd spiders目录,进行编写代码

import scrapyclass DmozSpider(scrapy.spiders.Spider):  name = "jamesavery"  #这个名字是要唯一的哦   allowed_domains = ["jamesavery.com"] #域名  start_urls = [                          "https://www.jamesavery.com/products/sister-in-my-heart-charm"  #这个放置你想要抓取的url列表  ]  def parse(self, response):    filename = response.url.split("/")[-1]    with open(filename, 'wb') as f:      f.write(response.body)

 

parse 是spider的一个方法。

被调用时,每个初始URL完成下载后生成的  对象将会作为唯一的参数传递给该函数。

该方法负责解析返回的数据(response data),提取数据(生成item)以及生成需要进一步处理的URL的  对象

(刚刚开始要是不太好理解,你可以这么理解,执行完start_urls之后,就会完成对应的这个网址下载,然后生成的response会调用回调函数parse,进行相应的解析)

 

执行完上面的程序,就是我们爬取这个网站,然后网站最后一个“/”符号之后的为文件名,保存我的网站源码,当然啦,这样子是远远不够的,我们不止想要网站的源码,还想要具体信息,应该怎么做呢,很easy。

我们先cd ..

回到上一级目录,然后有一个items.py,我们只要把他对应的类做一个稍微修改

class JaItem(scrapy.Item):  title = scrapy.Field()  link = scrapy.Field()  desc = scrapy.Field()  price = scrapy.Field()  image = scrapy.Field()  sku = scrapy.Field()

 

这里做一个简单的描述,首先我们想要获取一个产品的标题,产品的地址,产品的描述,产品的价格,产品的图片,产品的sku

我们可以定义一个这样子的item,就是容器,来装载这些东西。

获取到的数据对item进行建模,那我们要做的就是:需要从jamesavery中获取名字,url,以及网站的描述等等。

这里可能你们还有点迷迷糊糊的,没事,我们写代码。

import scrapyimport refrom ja.items import JaItemclass DmozSpider(scrapy.spiders.Spider):  name = "jamesavery"  allowed_domains = ["jamesavery.com"]  start_urls = [  "https://www.jamesavery.com/products/sister-in-my-heart-charm"  ]  def parse(self, response):    for sel in response.xpath('/html'):      item = JaItem()      item['title'] = sel.css("h1.product-details__name::text").extract()       item['link'] = sel.re(r'
') item['sku'] = sel.re(r'

 

根据上面我说的,然后代码这么写,看到parse里面的代码没有,我们获取的数据对原先的item进行建模,然后打印出来就很清晰看到啦,或者这里最后一行的

print(item['title'],item['link'],item['desc'],item['price'],item['image'],item['sku']) 你们可以改成 yield item,把整个item返回 然后执行这条命令,指定输出到ja.json文件
scrapy crawl jamesavery -o ja.json

 

 

 

我目前start_urls里面就放了一个产品的url,大家有没有想过,比如我们要爬取一个网站,需要爬三层,或者四层我们可以把所有的产品的url丢进start_urls,它采用的分布式的爬虫,一坨丢进去也是点击很快的,而且可以直接采集,解析,存储,非常方便scrapy有很多的spider,可以根据喜好来选择最近学习了crawlspider,然后使用crawlspider下载图片的例子可以参考githubhttps://github.com/Zhehello/scrapy

  

转载于:https://www.cnblogs.com/zhe-hello/p/9953296.html

你可能感兴趣的文章
NPOI Excel下拉项生成设置
查看>>
360该不该拍?
查看>>
用Xib创建控制器
查看>>
oracle的sqlplus和dos的中文乱码问题
查看>>
LVS+keepalived高可用负载均衡集群部署(二)---LAMP网站服务器与LVS服务器
查看>>
Struts2之简单数据类型转换
查看>>
python 打印数字
查看>>
iptables规则的查看、添加、删除和修改
查看>>
打开网站显示输入用户名和密码
查看>>
size_t的32位和64位兼容
查看>>
HBase全分布式模式的安装和配置
查看>>
Spring 框架的设计理念与设计模式分析
查看>>
十年web老兵整理的前端视频资料
查看>>
工作线程数究竟要设置为多少
查看>>
10个Python 统计报表/图表图形类库
查看>>
关于 xargs 参数被截断,tar 文件被覆盖的问题
查看>>
CentOS 6.3 上安装 Oracle 11g R2(转)
查看>>
js实现滚动新闻效果
查看>>
Nginx出现could not build the server_names_hash 解决办法
查看>>
Netbeans8在web项目中创建servlet
查看>>