1.scrapy shell
因为我对xpath不太熟,所以这个主要是用于测试crawlspider里的restrict_xpaths=抽取的对不对的
进入是在terminal里输入 scrapy shell "网址"
我比较常用response.xpath('//h3/a')
2.创建项目
创建项目用scrapy startproject 项目名称。但是在windows里会默认创建到安装盘附近,比较难找,我比较推荐,在你想创建的文件夹,比如f盘下,点击红色箭头指的地方,输入cmd,然后在输入scrapy startproject 项目名称,就能在这个文件下创建成功,当然用cd也行。
3.模板 scrapy genspider
在创建scrapy项目成功之后,有个提示,这个就是用模板创建spider的意思,按照它的步骤,先cd,然后scrapy genspider example(spider名称,不能跟项目名称重合),example.com,后来都可以改的。
结果
文件长这样。就是基础spider的样子。
import scrapy
class DoubancrawlerSpider(scrapy.Spider):
name = 'doubanCrawler'
allowed_domains = ['douban.com']
start_urls = ['http://douban.com/']
def parse(self, response):
pass
4.terminal
terminal操作跟别的terminal一样,比较有用的是箭头↑是上一个指令
5.控制爬取数量 scrapy crawl douban -s CLOSESPIDER_ITEMCOUNT
crawlspider可能会出现爬取全站的情况,但是我只想试试爬虫是否可行,命令行输入scrapy crawl douban -s CLOSESPIDER_ITEMCOUNT=90
只爬取90个item
6.start_urls与start_requests()
文档说可以批量导入起始网址,像这样。
也可以自己构建,比如网址比较简单
url ='https://faxian.smzdm.com/p{}/'
urls=[url.format(i) for i in range(1,10)]
def start_requests(self):
with open(“record.csv”) as f:
reader = csv.DictReader(f)
for item in reader:
yield scrapy.Request(url=item['url'], callback=self.parse_detail,dont_filter=True)
也可以传入data用于获取post的网址。
class MySpider(scrapy.Spider):
name = 'myspider'
def start_requests(self):
return [scrapy.FormRequest("http://www.example.com/login",
formdata={'user': 'john', 'pass': 'secret'},
callback=self.logged_in)]
def logged_in(self, response):
# here you would extract links to follow and return Requests for
# each of them, with another callback
pass