1、scrapy模組的簡單使用
阿新 • • 發佈:2020-12-10
scrapy模組
目錄
安裝scrapy
# 如果安裝了conda 直接使用
conda install scrapy
# 使用pip 安裝
pip install scrapy
# 安裝出錯
# 如果是Twisted安裝出錯,進入官網
https://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml
# 找到Twisted安裝包,下載下來之後使用 pip 安裝
建立一個專案
- 開啟一個cmd,進入安裝scrapy的環境
- 建立一個專案,例如爬取 https://www.bqkan.com/3_3012/ 筆趣看的小說 【武動乾坤】
- 建立一個爬蟲
- 使用程式碼編輯器開啟專案(例如pycharm) 目錄結構如下
- 新建立啟動檔案
from scrapy import cmdline
cmdline.execute("scrapy crawl wu".split())
- 修改wu.py檔案
import scrapy
from wudong.items import WudongItem
class WuSpider(scrapy.Spider):
name = 'wu'
allowed_domains = ['www.bqkan.com']
start_urls = ['https://www.bqkan.com/3_3012/1331001.html' ]
def parse(self, response):
contents = response.css('div#content::text').getall()
contents = [x.strip() for x in contents if x.strip() != '']
contents.pop()
contents.pop() # 去除結尾多餘的字元
contents = "\n\t".join(contents).replace('[筆趣看\xa0\xa0www.biqukan.com]百度搜索“筆趣看小說網”手機閱讀:m.biqukan.com' , '')
title = response.css('h1::text').get() # 章節名
yield WudongItem(title=title, contents=contents)
next_url = response.xpath('//a[contains(text(), "下一章")]/@href').get()
if next_url:
next_url = response.urljoin(next_url)
yield scrapy.Request(url=next_url, callback=self.parse)
- 修改items.py檔案
import scrapy
class WudongItem(scrapy.Item):
title = scrapy.Field()
contents = scrapy.Field()
- 修改pipelines.py檔案
class WudongPipeline:
def __init__(self):
# 儲存為txt檔案
self.f = open('武動乾坤.txt', 'w', encoding='utf-8')
def process_item(self, item, spider):
title = item['title']
contents = item['contents']
content = f'{title}\n\t{contents}'
print(content, file=self.f, flush=True) # 即使寫入
# self.f.write(content)
return item
def close_spider(self, spider):
self.f.close()
- 執行 startwudong.py 檔案
正常會輸出如下結果
同時建立一個文字檔案
一個簡單的scrapy爬蟲結束