scrapy爬蟲天貓筆記本電腦銷量前60的商品

来源:https://www.cnblogs.com/venmsu/archive/2018/01/29/8376397.html
-Advertisement-
Play Games

# 抓取內容:商品名稱,商品價格,商品鏈接,店鋪名稱,店鋪鏈接 # 爬取的時候之前返回了多次302,301 但是html網頁還是被爬取下來了 抓取的首頁: start_urls = ['https://list.tmall.com/search_product.htm?spm=a220m.10008 ...


# 抓取內容:商品名稱,商品價格,商品鏈接,店鋪名稱,店鋪鏈接 # 爬取的時候之前返回了多次302,301 但是html網頁還是被爬取下來了 抓取的首頁: start_urls = ['https://list.tmall.com/search_product.htm?spm=a220m.1000858.1000724.4.4b3df937tMXU1S&cat=50024399&sort=d&style=g&active=1&industryCatId=50024399&theme=663'] 第一步:item.py編寫   相信剛開始的準備工作不需要講了(cmd---scrapy startproject tianmao-----scrapy genspider topgood tmall.com)
 1 import scrapy
 2 
 3 
 4 class TianmaoItem(scrapy.Item):
 5     # define the fields for your item here like:
 6     # name = scrapy.Field()
 7     GOODS_PRICE = scrapy.Field()  # 價格
 8     GOODS_NAME = scrapy.Field()  # 名稱
 9     GOODS_URL = scrapy.Field()  # 商品鏈接
10     SHOP_NAME = scrapy.Field()  # 商店名稱
11     SHOP_URL = scrapy.Field()  # 商店鏈接

註釋:主要是介紹從一個網頁獲取商品價格名稱鏈接,再通過鏈接爬取商店名稱鏈接。所以挑了幾個具有代表性的數據。

第二步:編寫spiders

 

 1 # -*- coding: utf-8 -*-
 2 import scrapy
 3 from tianmao.items import TianmaoItem
 4 
 5 
 6 class TopgoodSpider(scrapy.Spider):
 7     name = 'topgood'
 8     allowed_domains = ['list.tmall.com', 'detail.tmall.com']  # 二級功能變數名稱
 9 
10     start_urls = ['https://list.tmall.com/search_product.htm?spm=a220m.1000858.1000724.4.4b3df937tMXU1S&cat=50024399&sort=d&style=g&active=1&industryCatId=50024399&theme=663']
11     
12     def parse(self, response):
13         divs = response.xpath("//div[@id='J_ItemList']/div[@class='product item-1111 ']/div") # 有的時候會出現標簽變化的情況,需要自行修改
14         print(divs)
15         
16         for div in divs:
17             item = TianmaoItem()
18             # 價格
19             item['GOODS_PRICE'] = div.xpath("p[@class='productPrice']/em/@title")[0].extract()  # 序列化該節點為unicode字元串並返回list
20             print(item)
21             # 名稱//*[@id="J_ItemList"]/div[3]/div/div[2]/a[1]
22             item['GOODS_NAME'] = div.xpath("div[@class='productTitle productTitle-spu']/a[1]/@title")[0].extract()
23             print(item)
24             pre_Product_Url = div.xpath("div[@class='productTitle productTitle-spu']/a[1]/@href").extract_first()
25             
26             if 'http' not in pre_Product_Url:
27                 pre_Product_Url = response.urljoin(pre_Product_Url)
28             
29             item['GOODS_URL'] = pre_Product_Url
30             print(item)
31             yield scrapy.Request(url=pre_Product_Url, meta={'item': item}, callback=self.parse_detail,dont_filter=True)
32 
33     def parse_detail(self, response):
34         divs = response.xpath("//div[@class='extend']/ul")
35         
36         if len(divs) == 0:
37             self.log("Detail Page error --%s"%response.url)
38         
39         div = divs[0]
40         item = response.meta['item']
41         item['SHOP_NAME'] = div.xpath("li[1]/div[1]/a/text()")[0].extract().strip()
42         item['SHOP_URL'] = div.xpath("li[1]/div[1]/a/@href")[0].extract()
43         
44         yield item
45 # 要保存為csv的格式    scrapy crawl topgood -o result.csv

 

第三步:setting.py編寫

BOT_NAME = 'tianmao'

SPIDER_MODULES = ['tianmao.spiders']
NEWSPIDER_MODULE = 'tianmao.spiders'

LOG_FILE = 'topgood.log'
LOG_STDOUT=True
DEPTH_LIMIT = 2

# Crawl responsibly by identifying yourself (and your website) on the user-agent
USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"

# Output .csv  
FEED_URI = u'goods.csv'  
FEED_FORMAT = 'CSV' 

DOWNLOAD_DELAY = 5

# Obey robots.txt rules
ROBOTSTXT_OBEY = False

# Override the default request headers:
DEFAULT_REQUEST_HEADERS = {
   'Accept': 'text/html,application/xhtml+xm…plication/xml;q=0.9,*/*;q=0.8',
   'Accept-Encoding': 'gzip, deflate, br',
   'Accept-Language': 'zh-CN,zh;q=0.8',
   "Cookie":"自己訪問該網站時候的cookie",
   "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36"
}

ITEM_PIPELINES = {
    'tianmao.pipelines.TianmaoPipeline': 300,
}

註:參數詳解

 

# BOT_NAME   ---項目名稱
# DEFAULT_REQUEST_HEADERS   ---預設請求頭
# DEPTH_LIMIT   ---爬取網頁的深度,預設零
# ITEM_PIPELINES   ---保存項目中啟用的pipeline及其順序的字典。該字典預設為空,值(value)任意。 不過值(value)習慣設定在0-1000範圍內。

# LOG_ENABLED   ---是否啟動logging
# LOG_ENCODING   ---logging的編碼
# LOG_FILE   ---日誌文件的文件名
# LOG_LEVEL   ---日誌記錄的級別   (CRITICAL、 ERROR、WARNING、INFO、DEBUG)
#                                (關鍵,     錯誤, 警告,    信息,調試)
# LOG_STDOUT   --- 預設: False
#               如果為 True ,進程所有的標準輸出(及錯誤)將會被重定向到log中。
#               例如, 執行 print 'hello' ,其將會在Scrapy log中顯示。
# RANDOMIZE_DOWNLOAD_DELAY   ---預設為True,在相同網站獲取數據時隨機暫停
#                               DOWNLOAD_DELAY  預設為0
# ROBOTSTXT_OBEY  預設False,是否遵守robots.txt策咯
# FEED_FORMAT   --- 設置數據保存的形式
# FEED_URI   --- 保存數據的路徑和文件名

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • vim編輯器 vi(visual interface) vim(vi improved) gvim(graph vim) vim vim打開文件 vim 的三種主要模式: vim的模式轉換 擴展模式進行的操作 命令模式進行的命令 編輯二進位文件 定製vim 的工作特性 vim高級 幫助 ...
  • 在調試驅動,可能需要對驅動里的某些變數進行讀寫,或函數調用。可通過sysfs介面創建驅動對應的屬性,使得可以在用戶空間通過sysfs介面的show和store函數與硬體交互; Syss介面可通過sysfs_create_group()來創建,如果設備驅動要創建,需要用到函數巨集DEVICE_ATTR; ...
  • 壓縮和解壓縮 compresss/uncompress/zcat gzip/gunzip/zcat bzip2/bunzip2/bzcat xz/unxz/xzcat zip/unzip tar split cpio cpio copy files to and from archives cpio ...
  • 掛載和卸載 掛卸載 mount umont fuser findmnt 交換分區的掛卸載 光碟的掛卸載和刻錄 USB掛載 自動掛載 ...
  • 本文收錄在日常運維雜燴系列 一、站點版 1、企業站 2、教育站 3、其他 二、軟體版 1、操作系統類 (1)Ubuntu 2、伺服器類 3、開發工具類 三、官方鏡像列表 四、歡迎留言補充 轉載自 http://www.cnblogs.com/clsn/p/8372108.html ...
  • 本文收錄在企業項目實戰系列 一、VPN 介紹 1、介紹 虛擬私人網路(英語:Virtual Private Network,縮寫為VPN)是一種常用於連接中、大型企業或團體與團體間的私人網路的通訊方法。虛擬私人網路的訊息透過公用的網路架構(例如:互聯網)來傳送內部網的網路訊息。它利用已加密的通道協議 ...
  • CentOS(Community Enterprise Operating System,中文意思是:社區企業操作系統)是Linux發行版之一,它是來自於Red Hat Enterprise Linux依照開放源代碼規定釋出的源代碼所編譯而成。由於出自同樣的源代碼,因此有些要求高度穩定性的伺服器以C ...
  • 一、下載I2C-tools工具: 最近在移植i2c-tools工具,下載地址:https://i2c.wiki.kernel.org/index.php/I2C_Tools;百度到了wiki中的git地址; 二、將git下載到external目錄下,編寫Android.mk,將其打包system.i ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...