scrapy爬取網站,並下載照片
阿新 • • 發佈:2022-03-10
scrapy爬取網站,並下載照片
-
items中定義實體
-
spider中編寫爬取邏輯
-
settings開啟一系列東西,
IMAGES_STORE = 'images'
-
pipelines編寫照片儲存程式碼,以及圖片重新命名
class DoubanImagePipeline(ImagesPipeline): def get_media_requests(self, item, info): yield scrapy.Request(item["bookImageLink"],meta={'name':item['bookName']}) def file_path(self, request, response=None, info=None): name = request.meta['name'] # name = re.sub(r'[?\\*|“<>:/]', '', name) #防止一些圖片名稱稀奇古怪的 imageName = name + '.jpg' return imageName def item_completed(self, results, item, info): return item
-
pipelines編寫資料儲存至csv檔案程式碼,編碼為utf8
class ToCsvPipeline(object): def __init__(self): # 開啟檔案,指定方式為寫,利用第3個引數把csv寫資料時產生的空行消除 self.f = open("doubandushu.csv", "a", newline="",encoding='utf8') # 設定檔案第一行的欄位名,注意要跟spider傳過來的字典key名稱相同 self.fieldnames = ["bookName", "bookScore", "bookDesc", "bookScoreNumber", "bookImageLink"] # 指定檔案的寫入方式為csv字典寫入,引數1為指定具體檔案,引數2為指定欄位名 self.writer = csv.DictWriter(self.f, fieldnames=self.fieldnames) # 寫入第一行欄位名,因為只要寫入一次,所以檔案放在__init__裡面 self.writer.writeheader() def process_item(self, item, spider): # 寫入spider傳過來的具體數值 self.writer.writerow(item) # 寫入完返回 return item def close(self, spider): self.f.close()
- pipelines編寫資料儲存至mysql資料庫程式碼,中文儲存帶上編碼utf8
class ToMysqlPipeline(object): def __init__(self): # 建立連線 self.conn = pymysql.connect( host = "39.101.142.214", user = "root", password = "123456", database = "mydb1", charset = "utf8") # 有中文要存入資料庫的話要加charset='utf8' # 建立遊標 self.cursor = self.conn.cursor() def process_item(self, item, spider): # sql語句 insert_sql = """ insert into doubandushu(book_name,book_score,book_desc,book_score_number,book_image_link) VALUES(%s,%s,%s,%s,%s) """ # 執行插入資料到資料庫操作 self.cursor.execute(insert_sql, (item['bookName'], item['bookScore'], item['bookDesc'], item['bookScoreNumber'], item['bookImageLink'])) # 提交,不進行提交無法儲存到資料庫 self.conn.commit() def close_spider(self, spider): # 關閉遊標和連線 self.cursor.close() self.conn.close()