1、安裝scrapy
pip3 install scrapy
2、打開terminal,cd 到想要創建程序的目錄下
3、創建一個scrapy項目
在終端輸入:scrapy startproject my_first_scrapy(項目名)
4、在終端輸入:cd my_first_scrapy 進入到項目目錄下
5、新建爬蟲:
輸入: scrapy genspider chouti chouti.com (chouti: 爬蟲名稱, chouti.com : 要爬取的網站的起始網址)
6、在pycharm中打開my_first_scrapy,就可以看到剛才創建的項目:
7、打開settings.py可以對項目相關參數進行設置,如設置userAgent:
8、打開chouti.py編寫代碼:

# -*- coding: utf-8 -*- """ 獲取抽屜新熱榜的標題和內容以及新聞地址保存到本地 """ import scrapy from scrapy.http import Request from scrapy.http.response.html import HtmlResponse from ..items import MyFirstScrapyItem class ChoutiSpider(scrapy.Spider): name = 'chouti' allowed_domains = ['chouti.com'] start_urls = ['http://chouti.com/'] def parse(self, response): # print(response, type(response)) # <class 'scrapy.http.response.html.HtmlResponse'> # print(response.text) # 解析文本內容, 提取標題和簡介,地址 # 去頁面中找id=content-list的div標簽,再去這個div下找class=item的div items = response.xpath("//div[@id='content-list']/div[@class='item']") # "//"表示從html文件的根部開始找。"/"表示從兒子里面找。".//"表示相對的,及當前目錄下的兒子里面找 for item in items: # 當前目錄下找class=part1的div標簽,再找div標簽下的a標簽的文本信息text(),並且只取第一個 # a標簽后面可以加索引,表示取第幾個a標簽,如第一個:a[0] title = item.xpath(".//div[@class='part1']/a/text()").extract_first().strip() # 去掉標題兩端的空格 href = item.xpath(".//div[@class='part1']/a/@href").extract_first().strip() # 取href屬性 summary = item.xpath(".//div[@class='area-summary']/span/text()").extract_first() # print(1, title) # print(2, href) # print(3, summary) item_obj = MyFirstScrapyItem(title=title, href=href, summary=summary) # 實例化 yield item_obj # 將數據交給pipelines # 獲取頁碼 page_list = response.xpath("//div[@id='dig_lcpage']//a/@href").extract() for url in page_list: url = "https://dig.chouti.com%s" % url yield Request(url=url, callback=self.parse) # 下載頁面內容
9、打開items.py寫代碼:

# -*- coding: utf-8 -*- # Define here the models for your scraped items # # See documentation in: # https://doc.scrapy.org/en/latest/topics/items.html import scrapy class MyFirstScrapyItem(scrapy.Item): # define the fields for your item here like: # name = scrapy.Field() # 規則化:將要持久化的數據轉化為某種格式 title = scrapy.Field() href = scrapy.Field() summary = scrapy.Field()
10、打開pipelines.py寫代碼:

""" 1、先去類中找from_crawler 有:執行且必須返回一個當前類的對象 沒有:不執行,則去執行構造方法__init__(self)並返回一個對象 2、再去執行"對象.其他方法" """ class MyFirstScrapyPipeline(object): def __init__(self, file_path): self.f = None self.file_path = file_path @classmethod def from_crawler(cls, crawler): """ 初始化時,用於創建pipelines對象 :param crawler: :return: """ file_path = crawler.settings.get("CHOUTI_NEWS_PATH") # 存儲文件的路徑 return cls(file_path) def open_spider(self, spider): """ 打開文件 :param spider:提交數據過來的爬蟲對象 :return: """ self.f = open(self.file_path, "a+", encoding="utf-8") def process_item(self, item, spider): """ :param item: 爬蟲中yield過來的item對象 :param spider:提交數據過來的爬蟲對象 :return: """ self.f.write(item["href"] + "\n") self.f.flush() # 將內容強刷到硬盤進行保存 return item def close_spider(self, spider): """ 關閉文件 :param spider:提交數據過來的爬蟲對象 :return: """ self.f.close()
11、在settings.py中找到 ITEM_PIPELINES進行設置,並設置存儲下載的新聞存儲的文件路徑:
12、運行爬蟲項目,在終端輸入:
scrapy crawl chouti(會打印日志) 或者 scrapy crawl chouti --nolog (不打印日志)