Scrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。 可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。话不多说,开始学习scrapy框架~
下载scrapy
pip3 install scrapy (python3以上版本)
创建scrapy项目
创建一个爬取代理ip的项目,命令如下:
scrapy startproject mySpiderIp
生成工程目录如下:
- scrapy.cfg: 项目的配置文件
- mySpiderIp/: 该项目的python模块。之后您将在此加入代码。
- mySpiderIp/items.py: 项目中的item文件.
- mySpiderIp/pipelines.py: 项目中的pipelines文件.
- mySpiderIp/settings.py: 项目的设置文件.
- mySpiderIp/spiders/: 放置spider代码的目录.
定义Item
编辑 mySpiderIp 目录中的 items.py 文件:
import scrapy
class MyspideripItem(scrapy.Item):
# define the fields for your item here like:
# name = scrapy.Field()
ip = scrapy.Field()
protocal = scrapy.Field()
port = scrapy.Field()
desc = scrapy.Field()
pass
编写第一个爬虫(Spider)
保存在 mySpiderIp/spiders 目录下的 IpSpider.py 文件中:
import scrapy
class IpSpider(scrapy.Spider):
name = "myIp"
allowed_domains = ["xicidaili.com"]
start_urls = [
"https://www.xicidaili.com/nn/1",
"https://www.xicidaili.com/nn/2"
]
def parse(self, response):
filename = response.url.split("/")[-1]
with open(filename, 'wb') as f:
f.write(response.body)
运行爬虫
scrapy crawl myIp(对应IpSpider name定义)
本以为成功执行,发现报错了。。
查阅资料发现是需要在 settings.py文件中设置user-agent和robots反爬虫策略:
- ROBOTSTXT_OBEY = False
- USER_AGENT = ‘Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36’
运行结果
生成了1/2两个文件,包含爬取网站html内容