Cách xây dựng một trình thu thập thông tin web cơ bản để lấy thông tin từ một trang web

Cách xây dựng một trình thu thập thông tin web cơ bản để lấy thông tin từ một trang web

Các chương trình đọc thông tin từ các trang web hoặc trình thu thập thông tin web có tất cả các loại ứng dụng hữu ích. Bạn có thể tìm kiếm thông tin cổ phiếu, tỷ số thể thao, văn bản từ tài khoản Twitter hoặc lấy giá từ các trang web mua sắm.





Viết các chương trình thu thập dữ liệu web này dễ dàng hơn bạn nghĩ. Python có một thư viện tuyệt vời để viết các tập lệnh trích xuất thông tin từ các trang web. Hãy xem cách tạo trình thu thập thông tin web bằng Scrapy.





Cài đặt Scrapy

Trị liệu là một thư viện Python được tạo ra để quét web và xây dựng trình thu thập thông tin web. Nó nhanh chóng, đơn giản và có thể điều hướng qua nhiều trang web mà không cần nỗ lực nhiều.





Scrapy có sẵn thông qua thư viện Pip Installs Python (PIP), đây là phần bổ sung về cách cài đặt PIP trên Windows, Mac và Linux .

Sử dụng Môi trường ảo Python được ưa thích hơn vì nó sẽ cho phép bạn cài đặt Scrapy trong một thư mục ảo để riêng các tệp hệ thống của bạn. Tài liệu của Scrapy khuyên bạn nên làm điều này để đạt được kết quả tốt nhất.



Tạo một thư mục và khởi tạo một môi trường ảo.

cách mở tệp psd mà không cần photoshop
mkdir crawler
cd crawler
virtualenv venv
. venv/bin/activate

Bây giờ bạn có thể cài đặt Scrapy vào thư mục đó bằng lệnh PIP.





pip install scrapy

Kiểm tra nhanh để đảm bảo Scrapy được cài đặt đúng cách

scrapy
# prints
Scrapy 1.4.0 - no active project
Usage:
scrapy [options] [args]
Available commands:
bench Run quick benchmark test
fetch Fetch a URL using the Scrapy downloader
genspider Generate new spider using pre-defined templates
runspider Run a self-contained spider (without creating a project)
...

Cách xây dựng trình thu thập thông tin web

Bây giờ môi trường đã sẵn sàng, bạn có thể bắt đầu xây dựng trình thu thập thông tin web. Hãy lấy một số thông tin từ một trang Wikipedia về pin: https://en.wikipedia.org/wiki/Battery_( Electricality) .





Bước đầu tiên để viết trình thu thập thông tin là xác định một lớp Python mở rộng từ Scrapy.Spider . Điều này cho phép bạn truy cập vào tất cả các chức năng và tính năng trong Scrapy. Hãy gọi lớp này con nhện1 .

Một lớp nhện cần một vài thông tin:

  • đến Tên để xác định con nhện
  • đến start_urls biến chứa danh sách các URL cần thu thập thông tin (URL Wikipedia sẽ là ví dụ trong hướng dẫn này)
  • đến phân tích cú pháp () phương pháp được sử dụng để xử lý trang web để trích xuất thông tin
import scrapy
class spider1(scrapy.Spider):
name = 'Wikipedia'
start_urls = ['https://en.wikipedia.org/wiki/Battery_(electricity)']
def parse(self, response):
pass

Kiểm tra nhanh để đảm bảo mọi thứ đang chạy bình thường.

scrapy runspider spider1.py
# prints
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Scrapy 1.4.0 started (bot: scrapybot)
2017-11-23 09:09:21 [scrapy.utils.log] INFO: Overridden settings: {'SPIDER_LOADER_WARN_ONLY': True}
2017-11-23 09:09:21 [scrapy.middleware] INFO: Enabled extensions:
['scrapy.extensions.memusage.MemoryUsage',
'scrapy.extensions.logstats.LogStats',
...

Tắt ghi nhật ký

Chạy Scrapy với lớp này in thông tin nhật ký sẽ không giúp bạn ngay bây giờ. Hãy làm cho nó đơn giản bằng cách loại bỏ thông tin nhật ký thừa này. Sử dụng một cảnh báo bằng cách thêm mã vào đầu tệp.

import logging
logging.getLogger('scrapy').setLevel(logging.WARNING)

Bây giờ khi bạn chạy lại tập lệnh, thông tin nhật ký sẽ không in.

Sử dụng Trình kiểm tra Chrome

Mọi thứ trên một trang web được lưu trữ trong các phần tử HTML. Các phần tử được sắp xếp trong Mô hình Đối tượng Tài liệu (DOM). Hiểu DOM là rất quan trọng để tận dụng tối đa trình thu thập thông tin web của bạn. Trình thu thập thông tin web tìm kiếm thông qua tất cả các phần tử HTML trên một trang để tìm thông tin, vì vậy việc biết chúng được sắp xếp như thế nào là rất quan trọng.

Google Chrome có các công cụ giúp bạn tìm các phần tử HTML nhanh hơn. Bạn có thể định vị HTML cho bất kỳ phần tử nào bạn thấy trên trang web bằng trình kiểm tra.

  • Điều hướng đến một trang trong Chrome
  • Đặt chuột vào phần tử bạn muốn xem
  • Nhấp chuột phải và chọn Quan sát từ menu

Các bước này sẽ mở bảng điều khiển dành cho nhà phát triển với Các yếu tố tab đã chọn. Ở cuối bảng điều khiển, bạn sẽ thấy một cây các phần tử. Cây này là cách bạn lấy thông tin cho kịch bản của mình.

Trích xuất tiêu đề

Hãy lấy script để thực hiện một số công việc cho chúng tôi; Thu thập thông tin đơn giản để lấy văn bản tiêu đề của trang web.

Bắt đầu tập lệnh bằng cách thêm một số mã vào phân tích cú pháp () phương pháp trích xuất tiêu đề.

...
def parse(self, response):
print response.css('h1#firstHeading::text').extract()
...

Các phản ứng đối số hỗ trợ một phương thức được gọi là CSS () chọn các phần tử từ trang bằng cách sử dụng vị trí bạn cung cấp.

Trong ví dụ này, phần tử là h1.firstHeading . Thêm

::text

tập lệnh là những gì cung cấp cho bạn nội dung văn bản của phần tử. cuối cùng trích xuất() phương thức trả về phần tử đã chọn.

Chạy tập lệnh này trong Scrapy sẽ in tiêu đề ở dạng văn bản.

[u'Battery (electricity)']

Tìm mô tả

Bây giờ chúng ta đã loại bỏ văn bản tiêu đề, hãy làm nhiều hơn với tập lệnh. Trình thu thập thông tin sẽ tìm đoạn đầu tiên sau tiêu đề và trích xuất thông tin này.

Đây là cây phần tử trong Bảng điều khiển dành cho nhà phát triển Chrome:

cách tìm kiếm trên tiktok pc
div#mw-content-text>div>p

Mũi tên bên phải (>) chỉ ra mối quan hệ cha-con giữa các phần tử.

Vị trí này sẽ trả về tất cả P các yếu tố phù hợp, bao gồm toàn bộ mô tả. Để có được cái đầu tiên P phần tử bạn có thể viết mã này:

response.css('div#mw-content-text>div>p')[0]

Giống như tiêu đề, bạn thêm trình trích xuất CSS

::text

để lấy nội dung văn bản của phần tử.

response.css('div#mw-content-text>div>p')[0].css('::text')

Biểu thức cuối cùng sử dụng trích xuất() để trả lại danh sách. Bạn có thể sử dụng Python tham gia() chức năng tham gia danh sách sau khi tất cả thu thập thông tin hoàn tất.

def parse(self, response):
print ''.join(response.css('div#mw-content-text>div>p')[0].css('::text').extract())

Kết quả là đoạn đầu tiên của văn bản!

An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is
...

Thu thập dữ liệu JSON

Liệu pháp có thể trích xuất thông tin dưới dạng văn bản, điều này rất hữu ích. Scrapy cũng cho phép bạn xem dữ liệu JavaScript Object Notation (JSON). JSON là một cách sắp xếp thông tin gọn gàng và được sử dụng rộng rãi trong phát triển web. JSON hoạt động khá tốt với Python cũng.

Khi bạn cần thu thập dữ liệu dưới dạng JSON, bạn có thể sử dụng năng suất tuyên bố được tích hợp trong Scrapy.

Đây là phiên bản mới của tập lệnh sử dụng câu lệnh lợi nhuận. Thay vì lấy phần tử p đầu tiên ở định dạng văn bản, điều này sẽ lấy tất cả các phần tử p và sắp xếp nó ở định dạng JSON.

làm thế nào để tạo một trò chơi phiêu lưu văn bản
...
def parse(self, response):
for e in response.css('div#mw-content-text>div>p'):
yield { 'para' : ''.join(e.css('::text').extract()).strip() }
...

Bây giờ bạn có thể chạy trình thu thập thông tin bằng cách chỉ định tệp JSON đầu ra:

scrapy runspider spider3.py -o joe.json

Tập lệnh bây giờ sẽ in tất cả các phần tử p.

[
{'para': 'An electric battery is a device consisting of one or more electrochemical cells with external connections provided to power electrical devices such as flashlights, smartphones, and electric cars.[1] When a battery is supplying electric power, its positive terminal is the cathode and its negative terminal is the anode.[2] The terminal marked negative is the source of electrons that when connected to an external circuit will flow and deliver energy to an external device. When a battery is connected to an external circuit, electrolytes are able to move as ions within, allowing the chemical reactions to be completed at the separate terminals and so deliver energy to the external circuit. It is the movement of those ions within the battery which allows current to flow out of the battery to perform work.[3] Historically the term 'battery' specifically referred to a device composed of multiple cells, however the usage has evolved additionally to include devices composed of a single cell.[4]'},
{'para': 'Primary (single-use or 'disposable') batteries are used once and discarded; the electrode materials are irreversibly changed during discharge. Common examples are the alkaline battery used for flashlights and a multitude of portable electronic devices. Secondary (rechargeable) batteries can be discharged and recharged multiple
...

Scraping nhiều phần tử

Cho đến nay, trình thu thập thông tin web đã loại bỏ tiêu đề và một loại phần tử khỏi trang. Scrapy cũng có thể trích xuất thông tin từ các loại phần tử khác nhau trong một tập lệnh.

Hãy cùng trích xuất các bản hit IMDb Box Office hàng đầu trong một ngày cuối tuần. Thông tin này được lấy từ http://www.imdb.com/chart/boxoffice , trong một bảng có các hàng cho mỗi số liệu.

Các phân tích cú pháp () phương thức có thể trích xuất nhiều trường từ hàng. Bằng cách sử dụng Công cụ dành cho nhà phát triển Chrome, bạn có thể tìm thấy các phần tử được lồng bên trong bảng.

...
def parse(self, response):
for e in response.css('div#boxoffice>table>tbody>tr'):
yield {
'title': ''.join(e.css('td.titleColumn>a::text').extract()).strip(),
'weekend': ''.join(e.css('td.ratingColumn')[0].css('::text').extract()).strip(),
'gross': ''.join(e.css('td.ratingColumn')[1].css('span.secondaryInfo::text').extract()).strip(),
'weeks': ''.join(e.css('td.weeksColumn::text').extract()).strip(),
'image': e.css('td.posterColumn img::attr(src)').extract_first(),
}
...

Các hình ảnh bộ chọn chỉ định rằng img là hậu duệ của td.posterColumn . Để trích xuất thuộc tính bên phải, hãy sử dụng biểu thức ::attr(src).

Chạy con nhện trả về JSON:

[
{'gross': '.8M', 'weeks': '1', 'weekend': '.8M', 'image': 'https://images-na.ssl-images-amazon.com/images/M/MV5BYWVhZjZkYTItOGIwYS00NmRkLWJlYjctMWM0ZjFmMDU4ZjEzXkEyXkFqcGdeQXVyMTMxODk2OTU@._V1_UY67_CR0,0,45,67_AL_.jpg', 'title': 'Justice League'},
{'gross': '.5M', 'weeks': '1', 'weekend': '.5M', 'image': 'https://images-na.ssl-images-amazon.com/images/M/MV5BYjFhOWY0OTgtNDkzMC00YWJkLTk1NGEtYWUxNjhmMmQ5ZjYyXkEyXkFqcGdeQXVyMjMxOTE0ODA@._V1_UX45_CR0,0,45,67_AL_.jpg', 'title': 'Wonder'},
{'gross': '7.3M', 'weeks': '3', 'weekend': '.7M', 'image': 'https://images-na.ssl-images-amazon.com/images/M/MV5BMjMyNDkzMzI1OF5BMl5BanBnXkFtZTgwODcxODg5MjI@._V1_UY67_CR0,0,45,67_AL_.jpg', 'title': 'Thor: Ragnarok'},
...
]

Thêm Web Scrapers và Bots

Scrapy là một thư viện chi tiết có thể thực hiện bất kỳ loại thu thập thông tin web nào mà bạn yêu cầu. Khi nói đến việc tìm kiếm thông tin trong các phần tử HTML, kết hợp với sự hỗ trợ của Python, thật khó để đánh bại. Cho dù bạn đang xây dựng một trình thu thập thông tin web hay tìm hiểu về những điều cơ bản của việc tìm kiếm web, giới hạn duy nhất là bạn sẵn sàng học bao nhiêu.

Nếu bạn đang tìm kiếm các cách khác để xây dựng trình thu thập thông tin hoặc bot, bạn có thể thử xây dựng các bot Twitter và Instagram bằng Python . Python có thể xây dựng một số thứ tuyệt vời trong phát triển web, vì vậy nó đáng để vượt qua trình thu thập dữ liệu web khi khám phá ngôn ngữ này.

Đăng lại Đăng lại tiếng riu ríu E-mail 15 lệnh Windows Command Prompt (CMD) bạn phải biết

Dấu nhắc lệnh vẫn là một công cụ mạnh mẽ của Windows. Dưới đây là các lệnh CMD hữu ích nhất mà người dùng Windows cần biết.

Đọc tiếp
Chủ đề liên quan
  • Lập trình
  • Công cụ quản trị trang web
  • Lập trình
  • Python
  • Hướng dẫn viết mã
  • Trình thu thập thông tin web
Giới thiệu về tác giả Anthony Grant(40 bài báo đã xuất bản)

Anthony Grant là một nhà văn tự do về Lập trình và Phần mềm. Anh ấy là sinh viên chuyên ngành Khoa học Máy tính, chuyên sâu về lập trình, Excel, phần mềm và công nghệ.

Xem thêm từ Anthony Grant

Theo dõi bản tin của chúng tôi

Tham gia bản tin của chúng tôi để biết các mẹo công nghệ, đánh giá, sách điện tử miễn phí và các ưu đãi độc quyền!

Bấm vào đây để đăng ký