Giter Site home page Giter Site logo

hailoc12 / docbao Goto Github PK

View Code? Open in Web Editor NEW
265.0 265.0 141.0 86.08 MB

Công cụ quét và phân tích từ khoá các trang báo mạng Việt Nam

Python 43.66% HTML 3.78% Shell 0.86% CSS 36.81% JavaScript 9.52% PHP 1.71% SCSS 3.66%
facebook-crawler made-in-vietnam newspaper-crawler python3 web-scraping

docbao's People

Contributors

dependabot[bot] avatar hailoc12 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

docbao's Issues

Tạo file setting để thay thế cho biến môi trường

Thấy bạn đang dùng các biến môi trường làm settings.

source SETTINGS.env
export DOCBAO_EXPORT_TO_RABBITMQ=true
export DOCBAO_RABBITMQ_HOST=127.0.0.1
export DOCBAO_RABBITMQ_USERNAME='admin'
export DOCBAO_RABBITMQ_PASSWORD='password'
export DOCBAO_RABBITMQ_EXCHANGE='exchange_name'
export DOCBAO_RABBITMQ_DEFAULT_QUEUE='default_queue_name'

Điều này hơi kì khôi. Biến môi trường chỉ nên dùng một ít để overwrite settings thôi. Biến môi trường có hạn chế:

  • Giá trị của nó hoàn toàn là text. Nó không hỗ trợ kiểu dữ liệu đa dạng, dữ liệu đọc lên toàn bộ là text ("1", "true") dẫn tới bạn phải đặt ra luật riêng để "ép kiểu" từ text sang giá trị thực, ví dụ từ "1" thành integer, từ "true", "1", "yes" thành boolean.
  • Cách gán giá trị cho biến môi trường là đang theo cú pháp của shell, khiến bạn phải viết dính chùm, ví dụ USERNAME='admin', không thể viết cách cho thông thoáng, dễ nhìn USERNAME = admin.

Đề xuất giải pháp:

  • Dùng file TOML.

Ghi chú:

  • Có 1 loại file hay được nhắc đến nhiều hơn là YAML, nhưng so với TOML, YAML có điểm dở là không hỗ trợ kiểu boolean, nên
    người ta đặt ra một đống quy ước để biểu diễn giá trị boolean ("0", "1", "true", "false", "yes", "no", "t", "f"...)
  • Đừng dùng JSON vì file JSON không cho ghi comment.

lỗi thư viện khi chạy lệnh bash!

Hello anh, em là sinh viên, em thấy bài chia sẻ của anh rất hay và nhiều kiến thức, nên em muốn kéo về và chạy thử. Nhưng trong lúc chạy lại gặp phải vấn đề bị lỗi thư viện. Em đã chạy cài lại thư viện nhưng mà lỗi vẫn xuất hiện. Nên em viết Issue này mong là anh có thể giúp em giải đáp chút thắc mắc. Em xin cám ơn.

image

Em chạy terminal của VSC trong ảnh và bị lỗi
ModuleNotFoundError: No module named 'pyvirtualdisplay'

-Em đã chạy pip install pyvirtualdisplay và chạy lại lệnh bash install.sh
-Trước đó em đã chạy lệnh export DOCBAO_BASE_DIR=/home/hiep/Project/Predict/docbao
image

  • Và 2 lệnh source SETTINGS.env , bash install.sh. Đến lệnh bash install thì em bị lỗi như hình đầu tiên.

Gom dữ liệu được tạo ra vào thư mục riêng

Các file được tạo ra bởi chương trình nên được gom vào thư mục riêng, ví dụ: client\data:

hot_keyword.json
keyword_dict.json
uncategorized_keyword.txt
article_data.json
article.dat
blacklist.dat
log_data.json

Và cho vào .gitignore cái thư mục này luôn, làm vậy cho mã nguồn nhìn gọn bớt :)
Hoặc tạo cái file config, để chỉ nơi chứa từng file, vì có thể triển khai cả client và server trên cùng 1 máy chủ, nên sẽ cập nhật trực tiếp server luôn, không cần phải dùng rclone.

Chạy chương trình/Cập nhật dữ liệu lên máy chủ có điều kiện

Xin chào, bạn làm tốt lắm, mình có ý cải tiến như sau:

  1. Sau khi docbao.py kết thúc, có thể kiểm tra điều kiện của database hiện tại để xem có dữ liệu mới không rồi dùng subprocess để chạy lệnh rclone lên máy chủ luôn. Như vậy sẽ hạn chế việc chạy rclone không cần thiết (trong run_docbao.sh).

  2. Khi bắt đầu chạy chương trình docbao.py, tạo ra 1 file lock, ví dụ docbao.lock ghi giá trị 1, sau khi chạy xong, xử lý hết dữ liệu, đẩy dữ liệu lên máy chủ xong thì ghi giá trị 0. Để lần sau chương trình chạy nếu thấy giá trị là 1 này thì không chạy nữa, hạn chế chạy chồng khi chương trình chạy bị kéo dài, và cũng giảm thời gian chờ giữa các lần chạy (thiết lập cronjob 1 phút chẳng hạn)

Tim hieu cach contribute cac yaml moi

mình thấy project rất hay và muốn làm 1 số resource yaml khác cho phục vụ nhu cầu cá nhân, đồng thời contribute luôn.
Nhưng khi đọc cái yaml hiện tại thì thấy khá là rối @@ nhìn hơi khó hiểu.
Không biết owner có thể share 1 chút về cách làm không ?, sample nói nhanh vài step là được rồi :)
Mình cũng là dev

Cơ chế tự động

Chào anh Lộc
em có một số thắc mắc mong được anh giải đáp
Anh cho em hỏi hiện cái crawler của anh có thể tự động rút trích các trang báo khác nhau không ạ ?
Cách anh tự động có phải là phân tích một cấu trúc web của từng trang báo sau đó crawler hay anh dùng 1 cách nào khác ?

Em cũng đang thực hiện 1 cái projects nhỏ để học về crawler nhưng bị bế tắc khúc rút trích tất cả các URLS của một trang web (do trang web thường sẽ có nhiều thứ như Page giới thiệu, Page liên lạc, Page sản phẩm, nhưng em chỉ muốn sử dụng Page sản phẩm để thực hiện việc rút trích ra dữ liệu thì anh cho em hỏi liệu có cách nào để em có thể làm được cái mà em đang nói tới không ạ ?)

Mong anh trả lời giúp em
Em cảm ơn anh vì đã đọc
Thái Học

Phân phối crawler dữ liệu tin tức qua RSS

Idea

Mỗi website tin tức đều có RSS cho từng danh mục
Ví dụ trang nld.com.vn https://nld.com.vn/thoi-su.rss
Link RSS chứa thông tin các item mỗi item trình bày như bên dưới

<item>
<title>
<![CDATA[
Điều tra vụ vay người dân hàng trăm tỉ đồng không có khả năng chi trả
]]>
</title>
<link>
<![CDATA[
https://nld.com.vn/thoi-su/dieu-tra-vu-vay-nguoi-dan-hang-tram-ti-dong-khong-co-kha-nang-chi-tra-20180907100003166.htm
]]>
</link>
<guid isPermaLink="false">
<![CDATA[
https://nld.com.vn/thoi-su/dieu-tra-vu-vay-nguoi-dan-hang-tram-ti-dong-khong-co-kha-nang-chi-tra-20180907100003166.htm
]]>
</guid>
<description>
<![CDATA[
<img src="https://nld.mediacdn.vn/zoom/130_200/2018/9/7/anh-15362890843522110867625.jpg" alt="Điều tra vụ vay người d&#226;n h&#224;ng trăm tỉ đồng kh&#244;ng c&#243; khả năng chi trả" title="Điều tra vụ vay người d&#226;n h&#224;ng trăm tỉ đồng kh&#244;ng c&#243; khả năng chi trả" width="130px" height="200px" />(NLĐO)- Cơ quan chức năng Quảng Trị đang điều tra, l&#224;m r&#245; tin b&#225;o một người phụ nữ vay khoảng 400 tỉ đồng của h&#224;ng chục người d&#226;n nhưng kh&#244;ng c&#243; khả năng chi trả.
]]>
</description>
<pubDate>9/7/2018 9:59:00 AM</pubDate>
</item>

Cách thực hiện

- Bước 1. Mỗi trang web tin tức, cralwer tất cả RSS cho danh mục cụ thể
- Bước 2. Mỗi link RSS sẽ được thực hiện crawler tuần tự để lấy thông tin cần
- Bước 3. Thực hiện song song tất cả website tin tức mỗi 10 phút

Tips:

  • Tránh block IP do request nhiều lần -> Thay đổi user agent trình duyệt + sử dụng proxy để fake IP
  • Tránh trùng dữ liệu và crawler -> Kiểm tra thời gian item đầu tiên của mỗi link RSS, nếu nó khác lần cuối thực hiện, sẽ tiến lấy dữ liệu từ thời gian đó lên.

Code

Đang thực hiện

Xây dựng mô hình quét phân tán để dễ scale

Góp ý của anh Nguyễn Bá Hòa:

  • Về mặt triển khai thì nếu đưa lên hệ thống k8s được thì rất tốt, vì quản lý tốt, scale tốt, nếu dự kiến dự án lớn và lâu dìa thì thật sự rất nên áp dụng k8s. chỉ cần 1 master và 1 vài worker là được. khi nào có bạn nào cho mượn vps thì chỉ cần join vào là xong. triển khai hai môi trường cũng dễ, dev và test hoặc các môi trường khác trong nháy mắt nếu cấu hình tốt
    • Về phần crawler thì dù làm bằng gì cũng phải được xử lý phân tán, vì crawler là tác vụ mất khá nhiều thời gian và liên tục, nếu được thì nên cấu trúc thành các worker để crawler, sử dụng redis làm queue cho worker chạy. sau cần scale out ra thì thêm worker là xong

Lỗi export dữ liệu bằng pickle ở backend khi số trường vượt quá 15.000

Lỗi này do write file ở chế độ wb, do đó nếu gặp lỗi thì xóa đè file dữ liệu đã có.

Giải pháp tạm thời: ghi ra một file temp, nếu không gặp lỗi thì thay thế file chính thức

Giải pháp lâu dài: thay thế cơ chế pickle bằng sqlite, viết một class database riêng để xử lý vấn đề này

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.