Trong việc thu thập các tiêu đề tin tức gần đây nhất, theo dõi xu hướng tin tức và thực hiện phân tích tình cảm về các vấn đề hiện tại, việc loại bỏ Google News chứng tỏ là một công cụ vô giá. Trong bài viết này, chúng tôi sẽ hướng dẫn bạn trong quá trình loại bỏ Google News bằng Python. Chúng tôi sẽ sử dụng thư viện yêu cầu để có được nội dung trang; LXML để phân tích các tài liệu HTML và trích xuất dữ liệu cần thiết. Đến cuối hướng dẫn này, bạn sẽ học cách trích xuất các tiêu đề tin tức và các liên kết tương ứng của chúng từ Google News vào định dạng JSON có cấu trúc.
Trước khi chúng tôi bắt đầu, hãy đảm bảo bạn đã cài đặt Python trên hệ thống của mình. Bạn có thể cài đặt các thư viện cần thiết bằng cách chạy các lệnh sau:
pip install requests
pip install lxml
Các thư viện này sẽ cho phép chúng tôi thực hiện các yêu cầu HTTP và phân tích nội dung HTML của trang web.
Chúng tôi sẽ lấy trang Google News tại URL sau:
URL = "https://news.google.com/topics/CAAqKggKIiRDQkFTRlFvSUwyMHZNRGRqTVhZU0JXVnVMVWRDR2dKSlRpZ0FQAQ?hl=en-US&gl=US&ceid=US%3Aen"
Trang này chứa nhiều mục tin tức, mỗi mục có tiêu đề chính và các bài viết liên quan. Cấu trúc XPath cho các mục này như sau:
Cấu trúc HTML của Google News vẫn nhất quán trên các trang khác nhau, đảm bảo rằng các yếu tố XPath được chỉ định được áp dụng trên toàn cầu.
Chúng tôi sẽ bắt đầu bằng cách tìm nạp nội dung của trang Google News bằng thư viện yêu cầu. Đây là mã để tìm nạp nội dung trang:
import requests
url = "https://news.google.com/topics/CAAqKggKIiRDQkFTRlFvSUwyMHZNRGRqTVhZU0JXVnVMVWRDR2dKSlRpZ0FQAQ?hl=en-US&gl=US&ceid=US%3Aen"
response = requests.get(url)
if response.status_code == 200:
page_content = response.content
else:
print(f"Failed to retrieve the page. Status code: {response.status_code}")
Mã này gửi yêu cầu GET đến URL Google News và lưu trữ nội dung HTML của trang trong biến trang_Content.
Với nội dung HTML trong tay, chúng ta có thể sử dụng LXML để phân tích trang và trích xuất các tiêu đề và liên kết tin tức.
from lxml import html
# Phân tích nội dung HTML
parser = html.fromstring(page_content)
Google News tổ chức các bài viết của mình trong các thùng chứa cụ thể. Trước tiên chúng ta sẽ trích xuất các container này bằng XPath của chúng và sau đó lặp lại thông qua chúng để trích xuất các tiêu đề và liên kết tin tức riêng lẻ.
Các bài báo tin tức chính được đặt dưới XPath sau:
main_news_elements = parser.xpath('//c-wiz[@jsrenderer="ARwRbe"]')
Bây giờ chúng ta có thể lặp qua 10 yếu tố hợp lệ đầu tiên và trích xuất các tiêu đề và liên kết:
news_data = []
for element in main_news_elements[:10]:
title = element.xpath('.//c-wiz/div/article/a/text()')[0]
link = "https://news.google.com" + element.xpath('.//c-wiz/div/article/a/@href')[0][1:]
# Đảm bảo dữ liệu tồn tại trước khi nối vào danh sách
if title and link:
news_data.append({
"main_title": title,
"main_link": link,
})
Yếu tố tin tức chính có các tiểu mục nơi có tin tức liên quan. Chúng ta có thể trích xuất những điều này bằng cách sử dụng một cách tiếp cận tương tự:
related_articles = []
related_news_elements = element.xpath('.//c-wiz/div/div/article')
for related_element in related_news_elements:
related_title = related_element.xpath('.//a/text()')[0]
related_link = "https://news.google.com" + related_element.xpath('.//a/@href')[0][1:]
related_articles.append({"title": related_title, "link": related_link})
news_data.append({
"main_title": title,
"main_link": link,
"related_articles": related_articles
})
Sau khi trích xuất dữ liệu, chúng tôi có thể lưu nó trong tệp JSON để sử dụng sau.
import json
with open('google_news_data.json', 'w') as f:
json.dump(news_data, f, indent=4)
Mã này sẽ tạo một tệp có tên google_news_data.json chứa tất cả các tiêu đề tin tức bị xóa và các liên kết tương ứng của chúng.
Khi loại bỏ một lượng lớn dữ liệu, đặc biệt là từ các trang web có lưu lượng truy cập cao như Google News, bạn có thể gặp phải các vấn đề như chặn IP hoặc giới hạn tỷ lệ. Để tránh điều này, bạn có thể sử dụng proxy. Proxy cho phép bạn định tuyến các yêu cầu của mình thông qua các địa chỉ IP khác nhau, khiến trang web khó phát hiện và chặn các hoạt động cạo của bạn hơn.
Đối với hướng dẫn này, bạn có thể sử dụng proxy bằng cách sửa đổi các yêu cầu. Gọi điện thoại:
proxies = {
"http": "http://your_proxy_ip:port",
"https": "https://your_proxy_ip:port",
}
response = requests.get(url, proxies=proxies)
Nếu bạn đang làm việc với một nhà cung cấp dịch vụ quản lý xoay vòng proxy, bạn chỉ cần định cấu hình dịch vụ trong các yêu cầu của mình. Nhà cung cấp sẽ xử lý việc xoay vòng và quản lý nhóm IP ở cuối của họ.
Đôi khi, các trang web có thể chặn các yêu cầu không có các tiêu đề thích hợp, chẳng hạn như chuỗi tác nhân người dùng xác định yêu cầu đến từ trình duyệt. Bạn có thể tùy chỉnh các tiêu đề của mình để tránh phát hiện:
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': '"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"',
'sec-ch-ua-arch': '"x86"',
'sec-ch-ua-bitness': '"64"',
'sec-ch-ua-full-version-list': '"Not)A;Brand";v="99.0.0.0", "Google Chrome";v="127.0.6533.72", "Chromium";v="127.0.6533.72"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-model': '""',
'sec-ch-ua-platform': '"Linux"',
'sec-ch-ua-platform-version': '"6.5.0"',
'sec-ch-ua-wow64': '?0',
'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/127.0.0.0 Safari/537.36',
}
response = requests.get(url, headers=headers)
Tại đây, mã đầy đủ, kết hợp tất cả các bước:
import requests
import urllib3
from lxml import html
import json
urllib3.disable_warnings()
# URL và tiêu đề
url = "https://news.google.com/topics/CAAqKggKIiRDQkFTRlFvSUwyMHZNRGRqTVhZU0JXVnVMVWRDR2dKSlRpZ0FQAQ?hl=en-US&gl=US&ceid=US%3Aen"
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': '"Not)A;Brand";v="99", "Google Chrome";v="127", "Chromium";v="127"',
'sec-ch-ua-arch': '"x86"',
'sec-ch-ua-bitness': '"64"',
'sec-ch-ua-full-version-list': '"Not)A;Brand";v="99.0.0.0", "Google Chrome";v="127.0.6533.72", "Chromium";v="127.0.6533.72"',
'sec-ch-ua-mobile': '?0',
'sec-ch-ua-model': '""',
'sec-ch-ua-platform': '"Linux"',
'sec-ch-ua-platform-version': '"6.5.0"',
'sec-ch-ua-wow64': '?0',
'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/127.0.0.0 Safari/537.36',
}
# Cấu hình proxy (thay thế bằng chi tiết proxy của bạn)
proxy = 'ip:port'
proxies = {
"http": f"http://{proxy}",
"https": f"https://{proxy}",
}
# Tìm nạp nội dung trang với các tiêu đề và proxy được chỉ định
response = requests.get(url, headers=headers, proxies=proxies, verify=False)
# Kiểm tra xem yêu cầu có thành công không
if response.status_code == 200:
page_content = response.content
else:
print(f"Failed to retrieve the page. Status code: {response.status_code}")
exit()
# Phân tích nội dung HTML bằng LXML
parser = html.fromstring(page_content)
# Trích xuất các tin tức chính và các bài viết liên quan
main_news_elements = parser.xpath('//*[@id="i10-panel"]/c-wiz/c-wiz')
# Khởi tạo một danh sách để lưu trữ dữ liệu tin tức được trích xuất
news_data = []
# Vòng lặp qua từng yếu tố tin tức chính
for element in main_news_elements[:10]:
# Trích xuất tiêu đề và liên kết tin tức chính
title = element.xpath('.//c-wiz/div/article/a/text()')
link = element.xpath('.//c-wiz/div/article/a/@href')
# Khởi tạo một danh sách để lưu trữ các bài viết liên quan cho tin tức chính này
related_articles = []
# Trích xuất các yếu tố tin tức liên quan trong cùng một khối
related_news_elements = element.xpath('.//c-wiz/div/div/article')
# Vòng lặp qua từng yếu tố tin tức liên quan và trích xuất tiêu đề và liên kết
for related_element in related_news_elements:
related_title = related_element.xpath('.//a/text()')[0]
related_link = "https://news.google.com" + related_element.xpath('.//a/@href')[0][1:]
related_articles.append({"title": related_title, "link": related_link})
# Nối các tin tức chính và các bài viết liên quan của nó vào danh sách news_data
if title is not None:
news_data.append({
"main_title": title,
"main_link": f'https://news.google.com{link}',
"related_articles": related_articles
})
else:
continue
# Lưu dữ liệu được trích xuất vào tệp JSON
with open("google_news_data.json", "w") as json_file:
json.dump(news_data, json_file, indent=4)
print('Data extraction complete. Saved to google_news_data.json')
Quét Google News bằng Python, cùng với các yêu cầu và thư viện LXML, tạo điều kiện phân tích chi tiết các xu hướng tin tức. Việc thực hiện các proxy và cấu hình các tiêu đề yêu cầu là rất quan trọng để tránh các khối và duy trì sự ổn định của cạp. Các proxy lý tưởng cho mục đích này bao gồm các proxy dữ liệu IPv4 và IPv6 và các proxy ISP, cung cấp tốc độ cao và ping thấp. Ngoài ra, các proxy dân cư năng động có hiệu quả cao do yếu tố tin cậy vượt trội của họ.
Мы получили вашу заявку!
Ответ будет отправлен на почту в ближайшее время.
С уважением proxy-seller.com!
Bình luận: 0