Hướng dẫn python search word in website - python tìm kiếm từ trong trang web

Làm thế nào để mở một trang web và tìm kiếm một từ trong Python?

Đã hỏi ngày 16 tháng 12 năm 2009 lúc 10:53Dec 16, 2009 at 10:53

Hướng dẫn python search word in website - python tìm kiếm từ trong trang web

Điều này là một chút đơn giản hóa:

>>> import urllib
>>> import re
>>> page = urllib.urlopen("http://google.com").read()

# => via regular expression

>>> re.findall("Shopping", page)
['Shopping']

# => via string.find, returns the position ...
>>> page.find("Shopping")
2716

Đầu tiên, lấy trang (ví dụ: thông qua

import urllib2

webp=urllib2.urlopen("the_page").read()

webp.find("the_word")
7). Thứ hai sử dụng một biểu thức chính quy để tìm các phần của văn bản, bạn quan tâm. Hoặc sử dụng
import urllib2

webp=urllib2.urlopen("the_page").read()

webp.find("the_word")
8.

Đã trả lời ngày 16 tháng 12 năm 2009 lúc 10:59Dec 16, 2009 at 10:59

Mikumikumiku

Phim thương hiệu vàng 176K4646 gold badges303 silver badges307 bronze badges

1

bạn có thể sử dụng urllib2

import urllib2

webp=urllib2.urlopen("the_page").read()

webp.find("the_word")

Hy vọng điều đó sẽ giúp: D

Đã trả lời ngày 16 tháng 12 năm 2009 lúc 11:02Dec 16, 2009 at 11:02

Ahmad Dwaikahmad DwaikAhmad Dwaik

9631 Huy hiệu vàng9 Huy hiệu bạc13 Huy hiệu đồng1 gold badge9 silver badges13 bronze badges

Làm thế nào để mở một trang web?

Tôi nghĩ rằng cách phù hợp nhất là:

from urllib2 import urlopen

page = urlopen('http://www.example.com').read()

Làm thế nào để tìm kiếm một từ?

Tôi đoán bạn sẽ tìm kiếm một số mẫu trong trang tiếp theo, vì vậy chúng tôi đi ở đây:

import re
pattern = re.compile('^some regex$')
match = pattern.search(page)

Đã trả lời ngày 16 tháng 12 năm 2009 lúc 13:34Dec 16, 2009 at 13:34

Satorusatorusatoru

30.6K29 Huy hiệu vàng89 Huy hiệu bạc139 Huy hiệu đồng29 gold badges89 silver badges139 bronze badges

0

Điều này có thể là do bạn đang liên hệ với một máy chủ yêu cầu một số thông tin tiêu đề trong yêu cầu GET, ví dụ:

Kiểm tra phần tiêu đề tùy chỉnh của gói yêu cầu để tìm hiểu cách thêm các tiêu đề phù hợp vào yêu cầu nhận của bạn

Hôm nay, kịch bản Python nhanh chóng là tất cả về việc tìm ra những từ được lặp lại hàng đầu trong một trang web. Ý tưởng cho điều này đã đến với tôi khi tôi đang suy nghĩ về các trang web xử lý tôi tìm thấy trên tìm kiếm của Google và có thể tạo ra một cơ sở dữ liệu các từ phổ biến cho mỗi trang web để giúp tôi tìm thấy các tài liệu hữu ích liên quan đến một chủ đề. Ý tưởng là tôi sẽ tìm kiếm các trang web dựa trên một chủ đề và trong các trang web chủ đề đó có xu hướng nói về một bộ chủ đề đa dạng về chủ đề đó. Sau đó, tôi có thể giữ danh sách các trang web của riêng mình khi tôi cần một công cụ nghiên cứu nhanh để tìm kiếm các nguồn lực cho các chủ đề giáo dục của tôi cho một cuộc họp sắp tới. Để có được một ý tưởng tốt hơn về một trang trên một trang web là gì, tôi đã hình dung một danh sách sử dụng từ phổ biến có thể hữu ích. Vì vậy, ở đây chúng tôi đi.

Sự chuẩn bị

Đây là một tập lệnh Python, vì vậy tôi sẽ giả sử bạn biết cách cài đặt và tạo các tập lệnh Python đơn giản. Đây không phải là một hướng dẫn về việc tạo kịch bản vì có rất nhiều tài nguyên ngoài kia để bắt đầu. Kịch bản sau đây đã được viết và kiểm tra trên máy Mac với Python 3.8.1

import urllib2

webp=urllib2.urlopen("the_page").read()

webp.find("the_word")
9

Tôi bắt đầu với việc tạo ra một môi trường ảo để làm việc với các tập lệnh của mình vì vậy tôi không tải xuống các gói có thể không tương thích với các tập lệnh khác mà tôi viết. Nếu bạn không quen thuộc với môi trường ảo, hãy xem trang web này.

Cài đặt các gói sau với PIP: Yêu cầu và Đẹp

Tôi cũng đã cài đặt các thư viện của LXML, và các thư viện HTML5. Nếu bạn muốn sử dụng cùng một thư viện, tôi đã sử dụng, bạn có thể lưu các mục sau dưới dạng yêu cầu.pip install -r requirements.txt instead.

requirements.txt

beautifulsoup4==4.10.0
certifi==2021.10.8
charset-normalizer==2.0.10
html5lib==1.1
idna==3.3
lxml==4.7.1
requests==2.27.1
six==1.16.0
soupsieve==2.3.1
urllib3==1.26.8
webencodings==0.5.1

Hãy nói về việc nhập khẩu cho dự án này

Gần đây tôi đã biết về dự án yêu cầu của người Viking và rất vui mừng được khám phá thêm. Yêu cầu thực sự đơn giản hóa quy trình để thực hiện cuộc gọi để lấy dữ liệu từ các máy chủ web. Tôi biết tôi sẽ sử dụng gói này cho công việc hàng ngày của mình, nơi điều này sẽ làm giảm lượng thời gian chúng tôi sẽ đưa chúng tôi đến các ý tưởng nguyên mẫu. Gói rất dễ sử dụng và tài liệu rất hữu ích

Tôi đã sử dụng những người đẹp trong một số năm cho nhu cầu phát triển PHP của tôi, vì nó đã làm cho dữ liệu cào từ trang web báo cáo của cảnh sát công cộng địa phương trở nên dễ dàng. Gói này đã được cải thiện rất nhiều trong những năm qua và là goto của tôi để vượt qua các tài liệu HTML và XML. Các tài liệu rất hữu ích và dễ theo dõi. Chỉ cần đọc các tài liệu một mình bắt đầu các ý tưởng của các dự án trong tương lai trong đầu tôi.

Cuối cùng, tôi chưa bao giờ nhận ra gói Counter Counter có sẵn theo mặc định trong phiên bản Python mà tôi hiện đang sử dụng (Python 3.8.1). Trong nhiều năm, tôi đã sử dụng từ điển của riêng mình để duy trì danh sách các từ và số lượng tương ứng. Tôi thậm chí cần sử dụng mã để kiểm tra xem từ đã tồn tại trong từ điển hay không để tăng các bộ đếm. Không còn nữa! Gói quầy đơn giản hóa rất nhiều việc sử dụng từ điển đếm và thực hiện tất cả các kiểm tra tự động cho giá trị hiện có để tăng. Bây giờ tôi chỉ cần một dòng mã tương tự như sau:

from urllib2 import urlopen

page = urlopen('http://www.example.com').read()
1

Thêm nhập khẩu

from typing import Counter
import requests
from bs4 import BeautifulSoup

Ngưng từ

Dừng từ là một thuật ngữ chúng tôi đã sử dụng khi tôi làm việc trong Phòng xung đột cho một công ty luật nghiên cứu thông tin khách hàng để đảm bảo chúng tôi có thể tham gia một trường hợp mới cho một khách hàng tiềm năng. Chúng tôi cần tìm kiếm nhiều cơ sở dữ liệu về thông tin bao gồm hàng tấn từ không liên quan đến tìm kiếm. Ví dụ, chúng tôi không cần các từ sau đây để hiển thị trong kết quả của chúng tôi vì chúng không có ý nghĩa liên quan đến nhiệm vụ: và, đó, tìm kiếm, thực hiện, ngân hàng, đất, dây, chuyển nhượng, trường học, bảng, v.v.

Bạn có thể quyết định các từ mà bạn không muốn đưa vào kết quả không liên quan đến nhu cầu tìm kiếm của riêng bạn. Tôi đã đưa ra một danh sách rất ngắn chỉ cho ví dụ này mà tôi đã sử dụng để thử nghiệm trên trang web này để kết quả của tôi sẽ ít nhiều hữu ích cho tôi. Điều chỉnh theo nhu cầu của bạn. Thêm phần sau vào tập lệnh của bạn

# list of stop words (words not to include)
stop_list = [ "about", "blog", "contact", "find", "full", "have", "list", "need", "news", "their", "with", "your" ]

Từ quầy

Đây là một điều dễ dàng, chúng tôi cần bắt đầu bộ đếm của chúng tôi và gán nó cho một biến. Thêm cái này bên cạnh tập lệnh của bạn.

# prepare a word counter
word_count = Counter()

Thời gian để yêu cầu trang web

Sau đây có thể nằm trên một dòng, nhưng tôi thấy hữu ích khi trích xuất URL ra một biến dễ dàng để thấy. Nếu tôi đặt URL vào chức năng GET trực tiếp, mắt tôi sẽ dễ dàng chuyển nó khi xem xét mã. Đây chỉ là một sở thích cho tôi. Trong các tập lệnh lớn hơn, tôi sẽ đặt tất cả các hằng số của mình lên gần đầu trang để dễ dàng truy cập nhưng vì sự đơn giản khi mô tả mã chúng tôi thêm nó ngay bây giờ.

Base_url rất đơn giản trong trường hợp này, vì tôi đang chạy một bản sao cục bộ của một trang web WordPress trên máy của mình. Bạn có thể chọn sử dụng những gì URL bạn muốn xem xét. Dòng tiếp theo chúng tôi thực hiện yêu cầu nhận được URL và lưu trữ phản hồi trong biến của chúng tôi (trong trường hợp này, chỉ đơn giản là ‘r,). Thêm mã sau vào tập lệnh của bạn với bất kỳ điều chỉnh cá nhân nào bạn mong muốn.

# lets get our web page (adjust to the url you want to review)
base_url = 'http://localtest.com:8880/'
r = requests.get(base_url)

Súp vào một ngày lạnh?

Tiếp theo chúng tôi sẽ phân tích phản hồi từ trang web. Điều này được thực hiện đơn giản với Đẹp. Phương thức yêu cầu.get () tạo một đối tượng Python và chúng tôi muốn phần văn bản của trang web. Điều này được lưu trữ trong một biến văn bản của người Viking, vì vậy chúng tôi sẽ chuyển trong ‘R.Text, cho hàm tạo đẹp của chúng tôi là đối số đầu tiên. Đối số thứ hai của chúng tôi là không bắt buộc nếu chúng tôi đang sử dụng trình phân tích cú pháp mặc định, tuy nhiên tôi muốn xác định rõ ràng ngay bây giờ để tôi không quên sau này nếu tôi thấy tôi muốn sử dụng ‘lxml, hoặc‘ html5lib. Sau đó, chúng tôi lưu đối tượng tạo ra đẹp vào một biến dễ nhớ, ‘súp. Thêm phần sau vào tập lệnh của bạn:

# parse the webpage into an element hierarchy and store in soup 
soup = BeautifulSoup(r.text, 'html.parser')

Hơn cả súp bảng chữ cái, hãy để một số từ

Bây giờ, đã đến lúc để cho người đẹp của chúng ta tỏa sáng! Gói có một phương thức gọi là get_text () sẽ chỉ rút ra phần văn bản giữa các phần tử HTML. Chỉ cần lưu ý rằng ngay cả văn bản giữa các thẻ sẽ được bao gồm. Tôi thấy rằng tôi cần phải chuyển hai đối số vào hàm này để có kết quả tốt hơn từ phần còn lại của tập lệnh. Tôi muốn tạo một chuỗi dài các từ, nhưng đối số đầu tiên cần thiết để thực hiện công việc này là sử dụng một không gian làm sự kết hợp giữa các kết quả văn bản. Đối số thứ hai là cần thiết để loại bỏ hàng tấn khoảng trắng có thể có trong HTML thô (nghĩ về một trang web chưa từng có với nhiều tab và ký tự không gian cho khả năng đọc của con người)

Trong cùng một dòng mã, sau đó chúng tôi buộc kết quả của get_text () là chữ thường có hàm thấp hơn (), sau đó chia chuỗi văn bản thành từng từ với hàm chia () và lưu mảng vào biến của chúng tôi gọi là "tất cả các từ". Tôi muốn một loạt các từ, vì nó rất dễ dàng để lặp qua danh sách và xử lý kết quả. Lưu ý, mảng này bao gồm nhiều bản sao của cùng một từ như chúng được tìm thấy trong trang web. Đây là những gì chúng ta mong đợi, để khi chúng ta lặp qua mảng, chúng ta sẽ sử dụng hàm bộ đếm của mình () để đếm tổng số lần xuất hiện của mỗi từ.

Thêm phần sau vào tập lệnh của bạn:

import urllib2

webp=urllib2.urlopen("the_page").read()

webp.find("the_word")
0

Vòng qua tất cả các từ và đếm những từ chúng ta quan tâm

Đây là phần thịt của phần đếm của mã. Tôi biết đây là một phần lớn để thảo luận, nhưng tôi sẽ làm tốt nhất có thể. Đầu tiên chúng tôi thiết lập cho vòng lặp của chúng tôi. Chúng tôi muốn xem xét từng ‘Word Word trong mảng của‘ all_words. Lưu ý: Sẽ có nhiều từ được lặp lại trong mảng, đây là những gì chúng tôi muốn bắt đầu.

Điều đầu tiên tôi làm với mỗi từ là loại bỏ bất kỳ dấu câu nào, như thời kỳ, dấu phẩy và dấu hỏi. Khi tôi chia văn bản súp ở trên, dấu chấm câu được bao gồm trong một từ bên cạnh.

Tiếp theo, chúng tôi kiểm tra độ dài của từ với câu lệnh ‘nếu có. Lựa chọn của tôi là chỉ nhìn vào những từ lớn hơn ba ký tự. Bạn có thể muốn tăng nó lên một để tránh đếm bốn từ chữ cái.

Nếu từ này là bốn ký tự trở lên, chúng tôi tiến hành kiểm tra xem từ này có nằm trong danh sách dừng của chúng tôi không và nếu vậy chúng tôi sử dụng lệnh ‘Tiếp tục để bỏ qua từ tiếp theo. Chúng tôi không muốn đếm bất kỳ từ nào trong súp nếu chúng nằm trong danh sách dừng của chúng tôi.

Do đó, nếu từ này có ít nhất 4 ký tự và không có trong danh sách dừng của chúng tôi thì chúng tôi muốn thêm từ đó vào số lượng của chúng tôi. Biến ‘Word_Count, là một đối tượng bộ đếm trong đó chúng ta có thể sử dụng từ hiện tại của mình làm khóa và nói với bộ đếm để thêm một vào số lượng hiện tại. Counter () sẽ kiểm tra xem khóa của chúng tôi có nằm trong danh sách của nó và thêm một vào giá trị hiện tại không, và nếu chưa có trong danh sách sẽ thêm khóa và bắt đầu tại một cho chúng tôi. Lưu ý: Bạn có thể sử dụng thủ công từ điển của riêng mình để theo dõi số lượng thêm một vài dòng mã. Bằng cách này, sử dụng Counter (), chúng tôi có thể làm sạch mã của mình nhiều hơn

Thêm phần sau vào tập lệnh của chúng tôi:

import urllib2

webp=urllib2.urlopen("the_page").read()

webp.find("the_word")
1

In các từ phổ biến nhất

Đây là bước cuối cùng! Chúng tôi sử dụng một hàm đặc biệt trong đối tượng Counter () của chúng tôi sẽ cung cấp cho chúng tôi các từ phổ biến nhất được sắp xếp theo hầu hết. Trong hàm ‘most_common () này, chúng tôi vượt qua số nguyên về số lượng từ để cung cấp. Tôi nghĩ rằng 50 hoạt động tốt nhất cho tôi.

Thêm phần sau vào tập lệnh của chúng tôi:

import urllib2

webp=urllib2.urlopen("the_page").read()

webp.find("the_word")
2

In các từ phổ biến nhất

Đây là bước cuối cùng! Chúng tôi sử dụng một hàm đặc biệt trong đối tượng Counter () của chúng tôi sẽ cung cấp cho chúng tôi các từ phổ biến nhất được sắp xếp theo hầu hết. Trong hàm ‘most_common () này, chúng tôi vượt qua số nguyên về số lượng từ để cung cấp. Tôi nghĩ rằng 50 hoạt động tốt nhất cho tôi.

import urllib2

webp=urllib2.urlopen("the_page").read()

webp.find("the_word")
3

Bộ kết quả mẫu

Sau đây là một phần của đầu ra khi tôi chạy mã so với trang này (sử dụng danh sách từ dừng được sửa đổi một chút)

import urllib2

webp=urllib2.urlopen("the_page").read()

webp.find("the_word")
4

Như bạn có thể thấy, bạn có thể có được một ý tưởng chung về chủ đề cho trang này. Có vẻ như chúng ta đang nói về một kịch bản Python, và tôi thấy BeautifulSoup được đề cập và trang web của Words và trang web được đề cập. Tôi cũng thấy từ quầy là tốt. Từ đó, tôi có thể phỏng đoán điều này có trang web có thể đang đếm một cái gì đó phổ biến và sử dụng Python và thư viện BeautifulSoup đối với một trang web hoặc chủ đề.

Mã nguồn đầy đủ

Xử lý sự cố

Một đại diện thích hợp không tìm thấy

Nếu bạn nhận được thông báo HTML sau và trạng thái phản hồi 406:

import urllib2

webp=urllib2.urlopen("the_page").read()

webp.find("the_word")
5

Không thể tìm thấy một đại diện thích hợp của tài nguyên được yêu cầu trên máy chủ này. Lỗi này được tạo bởi mod_security.

import urllib2

webp=urllib2.urlopen("the_page").read()

webp.find("the_word")
6

Và kết quả của bạn trông giống như sau: