HomeLập trìnhPythonCách cạo các...

Cách cạo các bài viết trên Wikipedia bằng Python


Trong bài viết này, tôi sẽ tạo một công cụ quét web bằng Python để quét các trang Wikipedia.

Máy quét sẽ chuyển đến một trang Wikipedia, cạo tiêu đề và theo một liên kết ngẫu nhiên đến trang Wikipedia tiếp theo.

Tôi nghĩ sẽ rất thú vị khi xem những trang Wikipedia ngẫu nhiên mà máy quét này sẽ truy cập!

Thiết lập cạp

Để bắt đầu, tôi sẽ tạo một tệp python mới có tên scraper.py:

touch scraper.py

Để thực hiện yêu cầu HTTP, tôi sẽ sử dụng requests thư viện. Bạn có thể cài đặt nó bằng lệnh sau:

pip install requests

Hãy sử dụng trang wiki cạo web làm điểm bắt đầu của chúng tôi:

import requests

response = requests.get(
	url="https://en.wikipedia.org/wiki/Web_scraping",
)
print(response.status_code)

Khi chạy trình cạp, nó sẽ hiển thị mã trạng thái 200:

python3 scraper.py
200

Được rồi, cho đến nay rất tốt! ?

Hãy trích xuất tiêu đề từ trang HTML. Để làm cho cuộc sống của tôi dễ dàng hơn, tôi sẽ sử dụng gói BeautifulSoup cho việc này.

pip install beautifulsoup4

Khi kiểm tra trang Wikipedia tôi thấy rằng thẻ tiêu đề có #firstHeading TÔI.

Ảnh chụp màn hình-2020-08-23-at-4.10.44-PM

Súp đẹp cho phép bạn tìm một phần tử bằng thẻ ID.

title = soup.find(id="firstHeading")

Kết hợp tất cả lại với nhau, chương trình bây giờ trông như thế này:

import requests
from bs4 import BeautifulSoup

response = requests.get(
	url="https://en.wikipedia.org/wiki/Web_scraping",
)
soup = BeautifulSoup(response.content, 'html.parser')

title = soup.find(id="firstHeading")
print(title.string)

Và khi chạy chương trình này, nó hiển thị tiêu đề của bài viết Wiki: ?

python3 scraper.py
Web scraping

Bây giờ tôi sẽ đi sâu vào Wikipedia. Tôi sẽ lấy ngẫu nhiên <a> gắn thẻ vào một bài viết Wikipedia khác và cạo trang đó.

Đọc thêm  Ví dụ về câu lệnh If-Else trong Python

Để làm điều này, tôi sẽ sử dụng món súp đẹp mắt để tìm tất cả <a> các thẻ trong bài viết wiki. Sau đó, tôi xáo trộn danh sách để biến nó thành ngẫu nhiên.

import requests
from bs4 import BeautifulSoup
import random

response = requests.get(
	url="https://en.wikipedia.org/wiki/Web_scraping",
)
soup = BeautifulSoup(response.content, 'html.parser')

title = soup.find(id="firstHeading")
print(title.content)

# Get all the links
allLinks = soup.find(id="bodyContent").find_all("a")
random.shuffle(allLinks)
linkToScrape = 0

for link in allLinks:
	# We are only interested in other wiki articles
	if link['href'].find("/wiki/") == -1: 
		continue

	# Use this link to scrape
	linkToScrape = link
	break

print(linkToScrape)

Như bạn có thể thấy, tôi sử dụng soup.find(id="bodyContent").find_all("a") để tìm tất cả các <a> các thẻ trong bài viết chính.

Vì tôi chỉ quan tâm đến các liên kết đến các bài viết khác trên wikipedia, nên tôi đảm bảo rằng liên kết đó chứa /wiki tiếp đầu ngữ.

Bây giờ khi chạy chương trình, nó sẽ hiển thị một liên kết đến một bài viết wikipedia khác, thật tuyệt!

python3 scraper.py
<a href="https://www.freecodecamp.org/wiki/Link_farm" title="Link farm">Link farm</a>

Tạo một cạp vô tận

Được rồi, hãy làm cho máy cạo thực sự cạo liên kết mới.

Để làm điều này, tôi sẽ chuyển mọi thứ vào một scrapeWikiArticle chức năng.

import requests
from bs4 import BeautifulSoup
import random

def scrapeWikiArticle(url):
	response = requests.get(
		url=url,
	)
	
	soup = BeautifulSoup(response.content, 'html.parser')

	title = soup.find(id="firstHeading")
	print(title.text)

	allLinks = soup.find(id="bodyContent").find_all("a")
	random.shuffle(allLinks)
	linkToScrape = 0

	for link in allLinks:
		# We are only interested in other wiki articles
		if link['href'].find("/wiki/") == -1: 
			continue

		# Use this link to scrape
		linkToScrape = link
		break

	scrapeWikiArticle("https://en.wikipedia.org" + linkToScrape['href'])

scrapeWikiArticle("https://en.wikipedia.org/wiki/Web_scraping")

Các scrapeWikiArticle sẽ lấy bài viết wiki, trích xuất tiêu đề và tìm một liên kết ngẫu nhiên.

Sau đó, nó sẽ gọi scrapeWikiArticle một lần nữa với liên kết mới này. Do đó, nó tạo ra một chu kỳ vô tận của một Scraper xuất hiện khắp nơi trên wikipedia.

Đọc thêm  Cách viết cơ sở dữ liệu đồ chơi đơn giản bằng Python trong vòng vài phút

Hãy chạy chương trình và xem những gì chúng tôi nhận được:

pythron3 scraper.py
Web scraping
Digital object identifier
ISO 8178
STEP-NC
ISO/IEC 2022
EBCDIC 277
Code page 867
Code page 1021
EBCDIC 423
Code page 950
G
R
Mole (unit)
Gram
Remmius Palaemon
Encyclopædia Britannica Eleventh Edition
Geography
Gender studies
Feminism in Brazil

Tuyệt vời, trong khoảng 10 bước, chúng tôi đã chuyển từ “Tìm kiếm trên web” sang “Chủ nghĩa nữ quyền ở Brazil”. Kinh ngạc!

Phần kết luận

Chúng tôi đã xây dựng một công cụ quét web bằng Python để quét các trang Wikipedia ngẫu nhiên. Nó xuất hiện không ngừng trên Wikipedia bằng cách đi theo các liên kết ngẫu nhiên.

Đây là một mánh lới quảng cáo thú vị và Wikipedia khá khoan dung khi đề cập đến việc thu thập thông tin trên web.

Ngoài ra còn có các trang web khó cạo hơn như Amazon hoặc Google. Nếu bạn muốn cạo một trang web như vậy, bạn nên thiết lập một hệ thống có trình duyệt Chrome không đầu và máy chủ proxy. Hoặc bạn có thể sử dụng một dịch vụ xử lý tất cả những thứ đó cho bạn như dịch vụ này.

Nhưng hãy cẩn thận để không lạm dụng các trang web và chỉ cạo dữ liệu mà bạn được phép cạo.

Chúc mừng mã hóa!



Zik.vn – Biên dịch & Biên soạn Lại

spot_img

Create a website from scratch

Just drag and drop elements in a page to get started with Newspaper Theme.

Buy Now ⟶

Bài viết liên quang

DMCA.com Protection Status