發表文章

目前顯示的是 4月, 2021的文章

爬蟲5-Seleium(如何使用)

圖片
  為什麼需要用Seleiun這樣的網站模擬器去叫起一個Browser呢?因為有些資料為了防止爬蟲,如果不是透過瀏覽器的方式叫起,將會無法trigger有拿資料的 function ,這是目前拿隱藏資料最快的解決辦法 裝好套件 pip install selenium 我們必須去載 chromedriver 然後放在我們專案的路徑下就可以使用了 範例: 情境是,某網站的Canvas是被Function 驅動後才產生的,所以直接發Request 返回是找不到Canvas這個節點 from selenium import webdriver from selenium.webdriver.chrome.options import Options options = Options() options.add_argument("--disable-notifications") chrome = webdriver.Chrome('./chromedriver/chromedriver.exe', chrome_options=options) chrome.get(response._url) # check we had canvas to insert data canvas = chrome.find_element_by_xpath("//canvas").size != 0 print(canvas) 透過Seleium叫起瀏覽器就可以去看Canvas 是否有被產生出來 小結: 透過瀏覽器的方式,以爬蟲速度來講是很慢的一件事情,接下來會去尋求更快的方法,如果有新的方法,會在此篇文章更新的

爬蟲4-Pipline image(下載圖片)

圖片
1.pipline: 翻成中文其實就是管道的意思,把資料想像成是管道裡的水,你把資料導流到你建設好的洪池,也就是自己定義的Class 裡面,但含式的名字 只能複寫喔,無法做到自訂義喔 在複寫pipline有幾個函式須注意: a.我們必須設定Setting的部分: ITEM_PIPELINES = { 'myproject.pipelines.MyImagesPipeline': 300 } IMAGES_STORE = os.getcwd()+"/comics" 如果沒有特別定義路徑的話,資料會直接在Current path 流進來 b.get_media_requests(對url發出request): 在main spider class 使用yield 資料將會第一手跑來這裡發出request: import scrapy from itemadapter import ItemAdapter from scrapy.exceptions import DropItem from scrapy.pipelines.images import ImagesPipeline class MyImagesPipeline(ImagesPipeline): def get_media_requests(self, item, info): for image_urlin item['image_urls']: yield scrapy.Request(image_url) def item_completed(self, results, item, info): image_paths = [x['path']for ok, xin resultsif ok] if not image_paths: raise DropItem("Item contains no images") adapter = ItemAdapter(item) adapter['image_paths'] = image_paths return item c.file_path(定義路徑):