Hướng dẫn google python - trăn google

Hướng dẫn google python - trăn google

Đã đăng vào thg 9 27, 2017 2:54 SA 2 phút đọc 2 phút đọc

Bài hướng dẫn này mình sử dụng microframework Flask làm web app. Những framework khác của Python như Django, Pyramid, Tornado ... có thể làm tương tự. Máy tính client để mình code chạy trên Ubuntu 16.04 cùng với Python 2.7.12.

Chuẩn bị

Trước khi chạy và deploy ứng dụng Python web, bạn cần phải chuẩn bị

  1. Sử dụng Cloud Platform để tạo mới Cloud Platform project. Tạo mới một App Engine application và tất nhiên là enable billing tại: Consle Cloud Google

  2. Cài đặt một số tool cần thiết:

  • Git
  • Google Cloud SDK

Tạo web Flask đơn giản

Ở bài hưởng dẫn này, mình sẽ tạo một web đơn giản. Nó sẽ in ra dòng

Flask==0.12.2
gunicorn==19.7.1
8

Đầu tiên, tạo một thư mục project

Flask==0.12.2
gunicorn==19.7.1
9. Trong thư mực project, ta sẽ tạo lần lượt các file:

  • main.py: chạy web
  • requirements.txt: quản lý lib python
  • app.yaml: cấu hình deploy và chạy code trên Google App Engine

Tạo một file

sudo pip install virtualenv
0 có nội dung như sau:

import logging

from flask import Flask


app = Flask(__name__)


@app.route('/')
def hello():
    """Return a friendly HTTP greeting."""
    return 'Hello World!'


@app.errorhandler(500)
def server_error(e):
    logging.exception('An error occurred during a request.')
    return """
    An internal error occurred: 
{}
See logs for full stacktrace. """
.format(e), 500 if __name__ == '__main__': # This is used when running locally. Gunicorn is used to run the # application on Google App Engine. See entrypoint in app.yaml. app.run(host='127.0.0.1', port=8080, debug=True)

Tạo một file

sudo pip install virtualenv
1 để quản lý các gói

Flask==0.12.2
gunicorn==19.7.1

Tiếp theo, bạn chạy thử ứng dụng:

  1. Nếu bạn không có
    sudo pip install virtualenv
    
    2 bạn có thể cài đặt chúng qua pip
sudo pip install virtualenv
  1. Tạo môi trường cô lập và cài đặt các gói cần thiết
virtualenv venv
source venv/bin/activate
pip install -r requirements.txt
  1. Chạy thử
python main.py
  1. Trên trình duyệt, gõ địa chỉ:
http://localhost:8080

Hướng dẫn google python - trăn google

Deploy

Trước khi deploy, bạn cần tạo một file

sudo pip install virtualenv
3 để cấu hình việc deploy

runtime: python
env: flex
entrypoint: gunicorn -b :$PORT main:app

runtime_config:
  python_version: 2

Điểm chú ý ở đây là

sudo pip install virtualenv
4.
sudo pip install virtualenv
5 là tên môi trường mà web app sẽ chạy trên đó. Thông tin cụ thể bạn có thể vào đây: https://cloud.google.com/appengine/docs/flexible/

OK. Tiếp theo là việc deploy.

  1. sudo pip install virtualenv
    
    6 tới thư mục project
    Flask==0.12.2
    gunicorn==19.7.1
    
    9. Sau đó, gõ lệnh deploy:
gcloud app deploy

Sau khi bạn cài đặt xong Google Cloud SDK bạn có thể sử dụng CLI

sudo pip install virtualenv
8 để thực hiện deloy app

  1. Trên browser bạn có thể xem kết quả của bạn tại
    sudo pip install virtualenv
    
    9. Hoặc có thể sử dụng
    sudo pip install virtualenv
    
    8:
gcloud app browse

Đã hoàn thành!!

Điểm mấu chốt của bài hướng dẫn

  • Tạo được project trên Goold App Engine
  • Cài được CLI
    sudo pip install virtualenv
    
    8 tools
  • Có một web app Python: tất nhiên rồi
  • Chú ý cấu hình trên
    sudo pip install virtualenv
    
    3 file.

Chúc bạn thành công !!!

All rights reserved

Hướng dẫn google python - trăn google

Trong bài Cách tìm kiếm với Google, tôi có giới thiệu một vài hướng tìm kiếm nâng cao với Google. Kỹ thuật tìm kiếm đó được gọi là Google Dork hay Google hacking.

Hướng dẫn google python - trăn google

Cách tìm kiếm này rất hiệu quả trong việc tìm kiếm thông tin mà ta cần. Nó tăng độ chính xác cho từ khóa tìm kiếm, giảm thời gian tìm kiếm, vân vân và mây mây.

Nhưng có một vấn đề đặt ra nếu kết quả có nhiều việc thủ công xem xét từng trang một là không hiệu quả. Nếu có một cách nào đó tự động lấy được tất cả các link trên sẽ giảm thời gian của ta đi rất nhiều.

Vì vậy, tôi đã tìm trên Google cách để giải quyết vấn đề đang gặp phải. Và phát hiện ra một bài hướng dẫn How To Scrape Google With Python. Bài hướng dẫn này rất cơ bản và dễ hiểu cho người mới.

Hãy bắt đầu code nào!!!

1. Chuẩn bị môi trường

  1. Hệ điều hành: Chọn hệ điều hành nào tùy thích, tôi dùng subsystem Ubuntu 18.04
  2. Python: Cài đặt python2 hoặc python3, tôi dùng python3
  3. Cài đặt pip: Windows, Ubuntu
    virtualenv venv
    source venv/bin/activate
    pip install -r requirements.txt
    
    3. Nếu sử dụng Python2
    virtualenv venv
    source venv/bin/activate
    pip install -r requirements.txt
    
    4
  4. IDE: Chọn IDE hoặc trình soạn thảo ưa thích, tôi dùng vim

Note: python2 đã không còn được hỗ trợ sửa lỗi từ nhà phát triển nữa.

2. Bắt đầu code

Cài đặt thư viện cần thiết

Đầu tiên cần cài đặt các thư viện cần thiết cho chương trình. Tạo một file requirements.txt và chèn vào nội dung sau:

requests
bs4

Sau đó chạy lệnh

Flask==0.12.2
gunicorn==19.7.1
0

Thêm thư viện

Để chương trình sử dụng được các hàm từ thư viện, ta cần import chúng vào trong chương trình.

Flask==0.12.2
gunicorn==19.7.1
1

Chuẩn bị câu truy vấn

Google sử dụng phương thức GET để nhận dữ liệu từ người dùng nhập vào ô tìm kiếm. Vì vậy ta cần phải tạo ra một địa chỉ URL (URI) tương tự khi ta tìm kiếm trên trình duyệt. Nội dung của từ khóa tìm kiếm được truyền cho tham số

virtualenv venv
source venv/bin/activate
pip install -r requirements.txt
5.

Flask==0.12.2
gunicorn==19.7.1
2

Google trả kết quả có sự khác biệt khi ta sử dụng PC/Laptop hoặc mobile. Làm sao Google biết được điều này, đó là nhờ vào User-Agent. Vì vậy, ta cần chỉ định User-Agent cho mỗi request tìm kiếm.PC/Laptop hoặc mobile. Làm sao Google biết được điều này, đó là nhờ vào User-Agent. Vì vậy, ta cần chỉ định User-Agent cho mỗi request tìm kiếm.

Flask==0.12.2
gunicorn==19.7.1
3

Sau khi đã User-Agent tiếp theo cần làm là chèn vào Header của HTTP. Tại sao lại cần chèn vào Header HTTP? Đó là bởi vì nếu không chèn vào thì lúc ta gửi đi sẽ không có thông tin đó.

Flask==0.12.2
gunicorn==19.7.1
4

Thực thi

Đến đây, ta đã có đủ thông tin cần thiết cho việc gửi một GET HTTP requests và nhận lại kết quả tương ứng từ Google.

Flask==0.12.2
gunicorn==19.7.1
5

Khi chạy lên ta thu được kết quả như ảnh dưới.

Hướng dẫn google python - trăn google

Không phải lúc nào ta cũng nhận được kết quả như mong muốn (tức là server phải hồi với HTTP status code 200). Vì vậy, ta cần phải kiểm tra kết quả trước khi thực hiện phân tích mã nguồn HTML. Kiểm tra rằng nếu server trả về 200 thì mới tiến hành phân tích HTML thông qua Beautiful Soup.

Flask==0.12.2
gunicorn==19.7.1
6

Sau khi có kết quả phản hồi từ Google, ta tiến hành tìm kiếm các link kết liên kết đến kết quả mong muốn. Công việc phân tích HTML để lấy ra kết quả được sự trợ giúp của Beautiful Soup sẽ giảm bớt gánh nặng cho ta. Khi lặp qua toàn bộ code HTML trích xuất kết quả và lưu vào trong một mảng.

Flask==0.12.2
gunicorn==19.7.1
7

Vậy là xong phần phân tích và lưu kết quả. Bây giờ cùng chạy thử nghiệm.

Hướng dẫn google python - trăn google

OK! Vậy là ngon lành cành đào rồi.

Đến đây ta có thể cài tiến thêm một chút là từ khóa tìm kiếm được nhập vào hoặc lấy từ tham số.

Hãy thêm chút code cho nó ngon hơn 'cành đào' nhé!

Git repo: :com0t/scrape-google-python.git