Cấp bậc tác giả:

TRAINING

Sử dụng Google Colab để Crawl dữ liệu với Selenium

Được viết bởi webmaster ngày 09/08/2020 lúc 10:21 AM
Việc quét dữ liệu từ trang web là một việc cần thiết trong các hoạt động machine learning nói chung và train model nói riêng. Selenium là một công cụ đa năng cung cấp đầy đủ việc quét dữ liệu từ trang web. Việc kết hợp với google colab cho phép bạn quét song song nhiều trang web bằng việc mở nhiều tab google colab mà không ảnh hưởng tới hiệu năng cũng như không cần tới sức mạnh máy tính.
  • 0
  • 7296

Sử dụng Google Colab để Crawl dữ liệu với Selenium

Việc quét dữ liệu từ trang web là một việc cần thiết trong các hoạt động machine learning nói chung và train model nói riêng. Selenium là một công cụ đa năng cung cấp đầy đủ việc quét dữ liệu từ trang web. Việc kết hợp với google colab cho phép bạn quét song song nhiều trang web bằng việc mở nhiều tab google colab mà không ảnh hưởng tới hiệu năng cũng như không cần tới sức mạnh máy tính.

Cài đặt thư viện:
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin
!pip install selenium

Import thư viện:
from selenium import webdriver
import pandas as pd
from bs4 import BeautifulSoup
from selenium import webdriver
import re
options = webdriver.ChromeOptions()
options.add_argument('-headless')
options.add_argument('-no-sandbox')
options.add_argument('-disable-dev-shm-usage')
Chúng ta thử mình quét dữ liệu từ trang web: avito.ru
Dữ liệu thường được tổ chức theo dạng thẻ: trong mỗi thẻ có các feauture cần thiết:

craw-data-01.png

Chúng ta chỉ cần tìm phần tử của thẻ div với class item_table-wrapper:
items = soup.find_all('div', {'class','item_table-wrapper' })

Sau đó, chúng ta tìm metro là phần tử của thẻ span với item-address-georeferences-item__after
metro_dis = item.find('span',{'class','item-address-georeferences-item__after'})

Code full:

def parse_page(search, page):
  url = "https://www.avito.ru/moskva?q="+ search+"&p="+ str(page)
  wd = webdriver.Chrome('chromedriver',options=options)
  wd.get(url)
  soup = BeautifulSoup(wd.page_source)
  items = soup.find_all('div', {'class','item_table-wrapper' })
  df_data =  []
  for item in items:
  metro_dis = item.find('span',{'class','item-address-georeferences-item__after'})
metro_name = item.find('span',{'span','item-address-georeferences-item__content'})
item_name = item.find('a',{'class','snippet-link'}).text
item_price  = item.find('span',{'class','snippet-price'}).text
link = item.find('a',{'class','snippet-link'})
urls = re.findall(r'href=[\'"]?([^\'" >]+)', str(link))
urls = ', '.join(urls)
metro_name= metro_name.text if metro_name else None
metro_dis = metro_dis.text if metro_dis else None
data = {'название объявления':item_name,'ссылка на объявление':(str('https://www.avito.ru')+urls),
'цена':item_price.replace('\n ', ''),'метро':metro_name,'расстояние':metro_dis}
df_data.append(data)
dataframe = pd.DataFrame(data=df_data)
return dataframe
df = parse_page('гречка', 4)

Kết quả sẽ hiển thị như bên dưới

craw-data-02.png

Tương tự với những Website khác.

Nguồn bài viết: Medium

BÌNH LUẬN BÀI VIẾT

Bài viết mới nhất

LIKE BOX

Bài viết được xem nhiều nhất

HỌC HTML