發表文章

目前顯示的是有「python」標籤的文章

爬蟲7-棄坑Scrapy框架(request)

圖片
  在開發到一半的爬蟲突然覺得Scrapy的彈性有點低,所以就立馬轉彎了 Scrapy缺點: 1.在yield資料的時候,只能擇一pipline來做資料的存取,假如我要ftp跟sql跟json只能擇一來做資料的存取 2.本身的功能還有些bug 是你無法去修復的 3.開發的彈性太差,不好擴充功能,必須照著官方檔案來實作 MySpider: 最後決定用最原始的方式來爬蟲,而這是我專案的結構 C:. └───mySpider-Sample │ .gitattributes │ .gitignore │ .gitignore.swp │ chromedriver.exe │ errorRecoder.py │ ftp.py │ main.py │ myfilter.py │ myProxy.py │ mysql.py │ README.md │ requirements.txt │ spider.py │ spider_playwright.py │ └───chromedriver chromedriver.exe 主項: a.spider: 1.主要是request搭配beautifulsoup 2.有存json以及圖片的功能 3.有限制防爬蟲的網站,目前沒有好的解決辦法 b.spider_playwright: 1.以playwright為主體 2.有存json以及圖片的功能 3.模擬器叫起瀏覽器方式 c.mysql: 1.存取sql的方法可以寫在這裡 2.我有寫一個getData的功能,(可以自行擴充喔) 3.擴充sql方法都可以寫在這裡 d.main: 程式的起始點 e.myproxy: 1.爬取免費的proxy  2.經過muyiple threads 驗證過拿的proxy都是活的,品質的話則不一定 f.myfilter: 1.透過跟sql要資料去排除重複性的資料 # here is get sql data to check it's existed it will remove duplicat

爬蟲6-PlayWright(仿真模擬器)

圖片
  前言: 我們來講講 PlayWright ,他是一個微軟開發的瀏覽器模擬器,也可以用來測試網站對於瀏覽器的相容性,他提供了 chrome , firefox , webkit 三個模擬器,之前在使用 seleium 還必須特別下載 driver 然後配置路徑給他,有點不太好用,如果 seleium 跟 playwright 兩個要相比的話,我會說playwright 更好用,更可以直接對 element 給執行 click 的動作,真的擬仿操作網站的行( 未來考慮做一個流量機器人來玩 ) Python 環境安裝: pip install playwright here is install browser emulate playwright install 我把爬蟲最常用的幾個功能列在下面: a.selector的基本用法: 1.以 // 或 / 或者 .. 開頭的,判斷為xpath pp = page.querySelector("xpath=//h2") pp = page.querySelector("//h2") 2.以引號 "" 或者 ' 開頭的,判斷為text ppp = page.querySelector("text=文本輸入") \ ppp = page.querySelector("'文本輸入'") 注意:雙引號里有一個單引號,不然無法識別 3.其他的,都判斷為css p = page.querySelector("css=h2") p = page.querySelector("h2") b.wait_for_selector: 等待你找的element出現後就會繼續往下,沒有則hand住,直到出現為止, #會等待element已經被生成才會往下 page.wait_for_selector('div.thumb-overlay-albums > a') c.query_selector: 如果有重複地class名,則會以找到第一個優先回傳,在尋找class 的時候同一個element無法抓取兩個以上的cla

爬蟲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(定義路徑):

爬蟲3-BeautifulSoup find select findall (Python)

圖片
  想知道BeautifulSoup 的詳細使用嗎? 快點進來吧~~~~ 我們用金正恩的WIKI範例要爬取的目標是這一區塊的目錄 那他html是長這樣子(可以再Chrome按下F12打開devtool,就可以看到了) HTML 解析: 在使用find和findAll還有select我們先把目錄區塊的HTML給攤開來 <div id="toc" class="toc" role="navigation" aria-labelledby="mw-toc-heading"><input type="checkbox" role="button" id="toctogglecheckbox" class="toctogglecheckbox" style="display:none"> <div class="toctitle" lang="zh-Hant-TW" dir="ltr"> <h2 id="mw-toc-heading">目錄</h2><span class="toctogglespan"><label class="toctogglelabel" for="toctogglecheckbox"></label></span> </div> <ul> <li class="toclevel-1 tocsection-1"><a href="#主要經歷"><span class="tocnumber">1</span> <span class=&qu

爬蟲2-BeautifulSoup (Python)

圖片
  我們來談談BeautifulSoup,有關美麗的湯 快點跟上,來不及了 Beautiful Soup 是一個 Python 庫,用於從 HTML 和XML文件中提取數據,甚麼你不知道HTML是甚麼,快來看看這篇文章吧 (晚點附上),簡單說他就是一個尋找HTML標籤的涵式庫 Beautiful Soup 來來來~~先附上Import的新鮮程式碼,並且把它寫在最上面喔 import scrapy from bs4 import BeautifulSoup 我們這樣就可以使用BeautifulSoup啦,話不多說馬上來作範例:(這邊我們採取用金正恩領導人的維基來作範例) from bs4 import BeautifulSoup from scrapy.crawler import CrawlerProcess class ExampleSpider(scrapy.Spider): name = 'example' allowed_domains = ['example.com'] start_urls = ['<https://zh.wikipedia.org/wiki/%E9%87%91%E6%AD%A3%E6%81%A9>'] def parse(self, response): content = response.body soup = BeautifulSoup(content, "html5lib") print(soup) #這邊放在程式碼最底下 好讓你可以在IDE直接執行可以看內容 process = CrawlerProcess() process.crawl(ExampleSpider) process.start() 利用 VS code 執行後在我們的終端機應該可以看這樣的內容(或是直接在終端機輸入 scrapy crawl example ) 這部分的code是發出 request 然後把回傳的資料解析,而這些回傳解析是靠 BeautifulSoup 解析完後所print出來的 我們來打開google的devtool吧(也可以再chrome按

爬蟲-建立Scrapy專案

圖片
  甚麼是Scrapy? 好啦別擔心,一開始我也不知道 簡單說Scrapy 是一個負責處理整個爬蟲系統資料流與事件的Frame Work,他可以很快速地幫你建立起一個爬蟲專案,並且幫你處理好大多數爬蟲的涵式 好吧,講了那麼多,我們趕快開始來建立我們的專案吧 現在就來開啟我們第一個 Scrapy 專案:     scrapy startproject ScrapyProject 你應該會看到這樣的字句在你的cmd裡面 You can start your first spider with: cd ScrapyProject scrapy genspider example example.com 接下來輸入: cd ScrapyProject scrapy genspider example [example.com](<http://example.com/>) 過來你會看到這樣的專案內容: 在example.py裡的內容有三個基本的變數: name = 'example': 我們執行爬蟲的檔案也就是example.py ,而且也是每支爬蟲在專案中的「唯一」名稱 allowed_domains = [' example.com ']: 定義爬蟲允許的網域清單,如果不在此網域request會被略過 start_urls = [' http://example.com/ '] 爬蟲網址清單,這邊也可以定義多個來爬取 這樣你就已經建立了一個基本的爬蟲專案了,是不是很棒呢 下一篇文章我們來談談beautifulsoup吧 說了這麼多,看完文章你做了甚麼? 下面Like給我按起來,分享出去(ʘ言ʘ╬)

第一次爬蟲就上手Python

圖片
爬蟲是甚麼,爬蟲可以吃嗎? 爬蟲核心就是” 把別人的資料庫都變成我的資料庫 ” 但是請注意,請當個有品的爬蟲,因為爬蟲會發出request對網站進行訪問,如果過量會讓網站掛掉的,網站擁有者也會查出爬蟲的IP並且進行封鎖(雖然有其他方法(`Д´)~~~~~~) 在這邊我先列出幾項讓大家遵守( 記得給我大聲在心裡默念 ): 只抓取你需要的資料,不要全部拿走 記得好好利用sleep function(你不知道sleep?? 之後會在後面的文章再給大家講解) 在於資料庫會有一個max_connections_per_hour 的限制,假如網站的流量限制太低,你可能爬到一半網站就掛了,所以請不要讓網站給掛了,你爬不到資料,對方的作者也無法提供網站的內容給大家 在了解爬蟲之前你必須先知道html、CSS、跟基本的python 語法,這樣才能將爬蟲運用的自如,這邊我先把基本環境列在下面,下一篇文章我再來講解一下基本的html知識 python :3.6 ( 點我去官網下載 ) Scrapy  pip install scrapy BeautifulSoup  pip install beautifulsoup urllib3  pip install urllib3 上面的指令請你打開終端機,並且把它們確實安裝 說了這麼多,第一篇文章你做了甚麼? 你良心不會痛嗎