Trích xuất các bài viết từ Medium có thể là vô cùng quan trọng cho các mục đích như đánh giá nội dung, thu thập dữ liệu hoặc giám sát các tác giả và các tác phẩm của họ. Trong hướng dẫn này, chúng tôi sẽ học cách cạo phương tiện - một trang web bài viết cho các nhà văn, sử dụng ngôn ngữ lập trình Python. Chúng tôi sẽ thảo luận về cách dữ liệu như tiêu đề bài viết, tên của tác giả, tên của ấn phẩm và bản thân cơ quan văn bản có thể được trích xuất từ một URL web nhất định của một bài viết trung bình.
Đối với hướng dẫn này, chúng tôi sẽ thực hiện bài viết này trên Medium: Các nhà trang trí tích hợp Python 9 Python tối ưu hóa mã của bạn đáng kể.
Trước khi bạn bắt đầu, hãy cài đặt các thư viện sau:
Cài đặt chúng bằng các lệnh sau:
pip install requests
pip install lxml
pip install pandas
Trung bình sử dụng các kỹ thuật phát hiện bot để ngăn chặn việc cạo trái phép. Các tiêu đề và proxy thích hợp là rất quan trọng để tránh phát hiện bot và cạo có trách nhiệm.
Tiêu đề : Những điều này mô phỏng một yêu cầu như thể nó đến từ một trình duyệt thực. Chúng bao gồm thông tin như loại trình duyệt, các loại nội dung được chấp nhận và hành vi lưu trữ.
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-IN,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'priority': 'u=0, i',
'sec-ch-ua': '"Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
}
Proxy : proxy có thể che giấu địa chỉ IP của bạn, xoay nó định kỳ để làm cho các yêu cầu ít có khả năng bị chặn bởi Medium. Dưới đây là một ví dụ về việc sử dụng nó với xác thực địa chỉ IP:
proxies = {
'http': 'IP:PORT',
'https': 'IP:PORT'
}
response = requests.get(
'https://medium.com/techtofreedom/9-python-built-in-decorators-that-optimize-your-code-significantly-bc3f661e9017',
headers=headers,
proxies=proxies
)
Đây là cách thiết lập các tiêu đề và gửi yêu cầu đến URL bài viết:
import requests
# Các tiêu đề để mô phỏng yêu cầu trình duyệt thực
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-IN,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'priority': 'u=0, i',
'sec-ch-ua': '"Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
}
url = 'https://medium.com/techtofreedom/9-python-built-in-decorators-that-optimize-your-code-significantly-bc3f661e9017'
response = requests.get(url, headers=headers)
Khi chúng tôi có nội dung trang, chúng tôi có thể phân tích nó và trích xuất thông tin liên quan.
Chúng tôi sẽ sử dụng LXML để phân tích phản hồi HTML và trích xuất các yếu tố cụ thể. Đây là cách để làm điều đó:
from lxml.html import fromstring
parser = fromstring(response.text)
# Trích xuất dữ liệu
title = parser.xpath('//h1[@data-testid="storyTitle"]/text()')[0]
author = parser.xpath('//a[@data-testid="authorName"]/text()')[0]
publication_name = parser.xpath('//a[@data-testid="publicationName"]/p/text()')[0]
publication_date = parser.xpath('//span[@data-testid="storyPublishDate"]/text()')[0]
content = '\n '.join(parser.xpath('//div[@class="ci bh ga gb gc gd"]/p/text()'))
auth_followers = parser.xpath('//span[@class="pw-follower-count bf b bg z bk"]/a/text()')[0]
sub_title = parser.xpath('//h2[@id="1de6"]/text()')[0]
Bây giờ, chúng tôi sẽ tạo một từ điển để giữ tất cả dữ liệu được trích xuất. Điều này giúp việc lưu vào tệp CSV dễ dàng hơn.
# Lưu dữ liệu trong một từ điển
article_data = {
'Title': title,
'Author': author,
'Publication': publication_name,
'Date': publication_date,
'Followers': auth_followers,
'Subtitle': sub_title,
'Content': content,
}
print(article_data)
Cuối cùng, hãy để lưu dữ liệu vào tệp CSV để phân tích thêm hoặc lưu giữ bản ghi.
import pandas as pd
# Chuyển đổi từ điển thành DataFrame và lưu dưới dạng CSV
df = pd.DataFrame([article_data])
df.to_csv('medium_article_data.csv', index=False)
print("Data saved to medium_article_data.csv")
Đây là mã hoàn chỉnh để cạo dữ liệu bài viết trung bình:
import requests
from lxml.html import fromstring
import pandas as pd
# Tiêu đề bắt chước trình duyệt
headers = {
'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
'accept-language': 'en-IN,en;q=0.9',
'cache-control': 'no-cache',
'dnt': '1',
'pragma': 'no-cache',
'priority': 'u=0, i',
'sec-ch-ua': '"Google Chrome";v="129", "Not=A?Brand";v="8", "Chromium";v="129"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-platform': '"Linux"',
'sec-fetch-dest': 'document',
'sec-fetch-mode': 'navigate',
'sec-fetch-site': 'none',
'sec-fetch-user': '?1',
'upgrade-insecure-requests': '1',
'user-agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36',
}
proxies = {
'http': 'IP:PORT',
'https': 'IP:PORT'
}
# Yêu cầu trang
url = 'https://medium.com/techtofreedom/9-python-built-in-decorators-that-optimize-your-code-significantly-bc3f661e9017'
response = requests.get(url, headers=headers, proxies=proxies)
# Phân tích cú pháp trang
parser = fromstring(response.text)
# Trích xuất dữ liệu
title = parser.xpath('//h1[@data-testid="storyTitle"]/text()')[0]
author = parser.xpath('//a[@data-testid="authorName"]/text()')[0]
publication_name = parser.xpath('//a[@data-testid="publicationName"]/p/text()')[0]
publication_date = parser.xpath('//span[@data-testid="storyPublishDate"]/text()')[0]
content = '\n '.join(parser.xpath('//div[@class="ci bh ga gb gc gd"]/p/text()'))
auth_followers = parser.xpath('//span[@class="pw-follower-count bf b bg z bk"]/a/text()')[0]
sub_title = parser.xpath('//h2[@id="1de6"]/text()')[0]
# Lưu dữ liệu
article_data = {
'Title': title,
'Author': author,
'Publication': publication_name,
'Date': publication_date,
'Followers': auth_followers,
'Subtitle': sub_title,
'Content': content,
}
# Lưu vào CSV
df = pd.DataFrame([article_data])
df.to_csv('medium_article_data.csv', index=False)
print("Data saved to medium_article_data.csv")
Nội dung cạo từ môi trường nên được tiến hành có trách nhiệm. Tải trọng yêu cầu quá mức trên các máy chủ có thể ảnh hưởng đến hiệu suất của dịch vụ và dữ liệu cạo mà không được phép có thể vi phạm các điều khoản sử dụng của trang web. Luôn kiểm tra tệp robot.txt và các điều khoản trước khi cạo bất kỳ trang web nào.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Bình luận: 0