Tin tức là cách tốt nhất để tìm hiểu những gì đang diễn ra trên toàn thế giới. Đối với các kỹ sư dữ liệu, các bài báo là một trong những cách tuyệt vời để thu thập lượng dữ liệu siêu thực. Nhiều dữ liệu hơn có nghĩa là nhiều hiểu biết hơn và đó là cách duy nhất để đổi mới công nghệ của chúng ta và đưa nhân loại của chúng ta lên tầm cao hơn bao giờ hết. Nhưng có
Tin tức là cách tốt nhất để tìm hiểu những gì đang diễn ra trên toàn thế giới. Đối với các kỹ sư dữ liệu, các bài báo là một trong những cách tuyệt vời để thu thập lượng dữ liệu siêu thực. Nhiều dữ liệu hơn có nghĩa là nhiều hiểu biết hơn và đó là cách duy nhất để đổi mới công nghệ của chúng ta và đưa nhân loại của chúng ta lên tầm cao hơn bao giờ hết. Nhưng có rất nhiều tin tức và con người không thể lấy được tất cả dữ liệu theo cách thủ công. Cách tốt nhất để tự động lấy dữ liệu là gì? Câu trả lời là trích xuất dữ liệu web cho các bài báo bằng python.
Trong bài viết này, chúng tôi sẽ tạo một trình thu thập dữ liệu web để thu thập các bài viết tin tức mới nhất từ nhiều tờ báo khác nhau và lưu trữ chúng dưới dạng văn bản. Chúng tôi sẽ thực hiện hai bước sau để có phân tích sâu hơn về cách thực hiện toàn bộ quy trình.
Giới thiệu cơ bản về trang web và HTML. Thu thập dữ liệu web bằng Python và thư viện nổi tiếng có tên BeautifulSoup.
Hãy thoải mái chuyển đến bất kỳ phần nào để tìm hiểu thêm về cách thực hiện thu thập dữ liệu web cho các bài viết tin tức bằng python
Nếu chúng ta muốn xóa thông tin quan trọng khỏi bất kỳ trang web hoặc trang web nào, điều quan trọng là phải biết trang web đó hoạt động như thế nào. Khi chúng ta truy cập URL cụ thể bằng bất kỳ trình duyệt web nào (Chrome, Firefox, Mozilla, v.v.), trang web đó là sự kết hợp của ba công nghệ,
HTML (Ngôn ngữ đánh dấu siêu văn bản): HTML định nghĩa nội dung của trang web. Đây là ngôn ngữ đánh dấu chuẩn để thêm nội dung vào trang web. Ví dụ, nếu bạn muốn thêm văn bản, hình ảnh hoặc bất kỳ nội dung nào khác vào trang web của mình, HTML sẽ giúp bạn thực hiện điều đó.
CSS (Cascading Style Sheets): Được sử dụng để tạo kiểu cho các trang web. CSS xử lý tất cả các thiết kế trực quan mà bạn thấy trên một trang web cụ thể.
JavaScript: JavaScript là bộ não của một trang web. JavaScript xử lý tất cả các logic xử lý và chức năng của trang web. Do đó, nó cho phép làm cho nội dung và phong cách tương tác.
Ba ngôn ngữ lập trình này cho phép chúng ta tạo và thao tác các khía cạnh của trang web.
Tôi cho rằng bạn biết những điều cơ bản về trang web và HTML cho bài viết này. Một số khái niệm HTML như div, thẻ, tiêu đề, v.v., có thể rất hữu ích khi tạo trình thu thập dữ liệu web này. Bạn không cần biết mọi thứ mà chỉ cần biết những điều cơ bản về thiết kế trang web và cách thông tin được chứa trong đó, và chúng ta đã sẵn sàng.
Python có một số gói cho phép chúng ta thu thập thông tin từ trang web. Chúng ta sẽ tiếp tục với BeautifulSoup vì đây là một trong những thư viện Python nổi tiếng và dễ sử dụng nhất để thu thập thông tin từ trang web.
BeautifulSoup là tốt nhất để phân tích nội dung HTML của URL và truy cập nó bằng thẻ và nhãn. Do đó, sẽ thuận tiện để trích xuất một số đoạn văn bản nhất định từ trang web.
Chỉ với 3-5 dòng mã, chúng ta có thể thực hiện phép thuật và trích xuất bất kỳ loại văn bản nào trên trang web theo ý muốn từ internet, điều này chứng tỏ đây là một gói dễ sử dụng nhưng mạnh mẽ.
Chúng ta bắt đầu từ những điều cơ bản nhất. Để cài đặt gói thư viện, hãy nhập lệnh sau vào bản phân phối Python của bạn,
! pip cài đặt beautifulsoup4
Chúng tôi cũng sẽ sử dụng 'requests module' vì nó cung cấp cho BeautifulSoup mã HTML của bất kỳ trang nào. Để cài đặt nó, hãy nhập lệnh sau vào bản phân phối Python của bạn,
! yêu cầu cài đặt pip
Module yêu cầu này sẽ cho phép chúng ta lấy mã HTML từ trang web và điều hướng nó bằng cách sử dụng gói BeautfulSoup. Hai lệnh sẽ giúp công việc của chúng ta dễ dàng hơn nhiều là
find_all(element tag, attribute): Hàm này lấy tag và attributes làm tham số và cho phép chúng ta định vị bất kỳ phần tử HTML nào từ trang web. Nó sẽ xác định tất cả các phần tử cùng loại. Chúng ta có thể sử dụng find() thay thế để chỉ lấy phần tử đầu tiên.
get_text(): Khi đã xác định được vị trí của phần tử nhất định, lệnh này cho phép chúng ta trích xuất văn bản bên trong.
Để điều hướng mã HTML của trang web và xác định vị trí các thành phần chúng ta muốn trích xuất, chúng ta có thể sử dụng tùy chọn 'kiểm tra thành phần' bằng cách nhấp chuột phải vào trang hoặc chỉ cần nhấn Ctrl+F. Nó sẽ cho phép bạn xem mã nguồn của trang web.
Khi đã xác định được các phần tử quan tâm, chúng ta sẽ lấy mã HTML bằng mô-đun requests và để trích xuất các phần tử đó, chúng ta sẽ sử dụng BeautifulSoup.
Đối với bài viết này, chúng tôi sẽ thực hiện với tờ báo tiếng Anh EL Paris . Chúng tôi sẽ trích xuất tiêu đề bài viết từ trang đầu và sau đó là văn bản.
Nếu chúng ta kiểm tra mã HTML của các bài báo, chúng ta sẽ thấy rằng bài viết trên trang nhất có cấu trúc như thế này,
The title has <h2> element with itemprop=”headline” and class=”articulo-titulo” attributes. It has an href attribute containing the text. So we will now extract the text using the following commands:
yêu cầu nhập khẩu từ bs4 nhập khẩu BeautifulSoup
Sau khi lấy được nội dung HTML bằng mô-đun requests, chúng ta có thể lưu nội dung đó vào biến coverpage:
# Yêu cầu r1 = requests.get(url) r1.status_code # Chúng tôi sẽ lưu nội dung trang bìa trong coverpage coverpage = r1.content
Tiếp theo, chúng ta sẽ định nghĩa biến soup,
# Sáng tạo súp1 = BeautifulSoup(trang bìa, 'html5lib' )
Trong dòng mã sau, chúng ta sẽ xác định vị trí các phần tử mà chúng ta đang tìm kiếm,
# Nhận dạng tin tức coverpage_news = soup1.find_all( 'h2' , class_= 'articulo-titulo' )
Sử dụng final_all, chúng ta sẽ nhận được tất cả các lần xuất hiện. Do đó, nó phải trả về một danh sách trong đó mỗi mục là một bài báo,
Để có thể trích xuất văn bản, chúng ta sẽ sử dụng lệnh sau:
trang bìa_tin_tức [4] .get_text ()
Nếu chúng ta muốn truy cập giá trị của một thuộc tính (trong trường hợp của chúng ta là liên kết), chúng ta có thể sử dụng lệnh sau:
trang bìa_tin tức [4] [ 'href' ]
Điều này sẽ cho phép chúng tôi lấy được liên kết ở dạng văn bản thuần túy.
Nếu bạn đã nắm được tất cả các khái niệm cho đến thời điểm này, bạn có thể trích xuất bất kỳ nội dung nào theo ý muốn của mình.
Bước tiếp theo bao gồm truy cập từng nội dung của bài viết tin tức bằng thuộc tính href, lấy mã nguồn để tìm các đoạn văn trong mã HTML và cuối cùng lấy chúng bằng BeautifulSoup. Đây là quy trình tương tự như chúng tôi đã mô tả ở trên, nhưng chúng tôi cần xác định các thẻ và thuộc tính xác định nội dung bài viết tin tức.
Mã cho chức năng đầy đủ được đưa ra bên dưới. Tôi sẽ không giải thích từng dòng riêng biệt vì mã được chú thích; người ta có thể hiểu rõ bằng cách đọc các chú thích đó.
số_bài_viết = 5
# Danh sách trống cho nội dung, liên kết và tiêu đề news_contents = [] list_links = [] list_titles = [] for n in np.arange(0, number_of_articles): # chỉ các bài viết tin tức (cũng có album và những thứ khác) nếu "inenglish" không có trong coverpage_news[n].find( 'a' )[ 'href' ]: tiếp tục # Lấy liên kết của bài viết link = coverpage_news[n].find( 'a' )[ 'href' ] list_links.append( link ) # Lấy tiêu đề title = coverpage_news[n].find( 'a' ).get_text() list_titles.append(title) # Đọc nội dung (được chia thành các đoạn văn) article = requests.get( link ) article_content = article.content soup_article = BeautifulSoup(article_content, 'html5lib' ) body = soup_article.find_all( 'div' , class_= 'articulo-cuerpo' ) x = body[0].find_all( 'p' ) # Thống nhất các đoạn văn list_paragraphs = [] cho p trong np.arange(0, len(x)): paragraph = x[p].get_text() list_paragraphs.append(paragraph) final_article = " " .join (list_paragraphs) news_contents.append(final_article)
Chúng ta hãy đưa các bài viết đã trích xuất vào như sau:
# df_features
df_features = pd.DataFrame(
{'Article Content': news_contents
})
# df_show_info
df_show_info = pd.DataFrame(
{'Article Title': list_titles,
'Article Link': list_links})
df_features
df_show_thông_tin
Để xác định trải nghiệm người dùng tốt hơn, chúng tôi cũng sẽ đo thời gian một tập lệnh mất để nhận tin tức. Chúng tôi sẽ xác định một hàm cho việc này và sau đó gọi. Một lần nữa, tôi sẽ không giải thích từng dòng mã khi mã được chú thích. Để hiểu rõ hơn, bạn có thể đọc các chú thích đó.
def get_news_elpais():
# url definition
url = "https://elpais.com/elpais/inenglish.html"
# Request
r1 = requests.get(url)
r1.status_code
# We'll save in coverpage the cover page content
coverpage = r1.content
# Soup creation
soup1 = BeautifulSoup(coverpage, 'html5lib')
# News identification
coverpage_news = soup1.find_all('h2', class_='articulo-titulo')
len(coverpage_news)
number_of_articles = 5
# Empty lists for content, links and titles
news_contents = []
list_links = []
list_titles = []
for n in np.arange(0, number_of_articles):
# only news articles (there are also albums and other things)
if "inenglish" not in coverpage_news[n].find('a')['href']:
continue
# Getting the link of the article
link = coverpage_news[n].find('a')['href']
list_links.append(link)
# Getting the title
title = coverpage_news[n].find('a').get_text()
list_titles.append(title)
# Reading the content (it is divided in paragraphs)
article = requests.get(link)
article_content = article.content
soup_article = BeautifulSoup(article_content, 'html5lib')
body = soup_article.find_all('div', class_='articulo-cuerpo')
x = body[0].find_all('p')
# Unifying the paragraphs
list_paragraphs = []
for p in np.arange(0, len(x)):
paragraph = x[p].get_text()
list_paragraphs.append(paragraph)
final_article = " ".join(list_paragraphs)
news_contents.append(final_article)
# df_features
df_features = pd.DataFrame(
{'Content': news_contents
})
# df_show_info
df_show_info = pd.DataFrame(
{'Article Title': list_titles,
'Article Link': list_links,
'Newspaper': 'El Pais English'})
return (df_features, df_show_info)
ProxyScrape là một trong những nhà cung cấp proxy trực tuyến phổ biến và đáng tin cậy nhất. Ba dịch vụ proxy bao gồm máy chủ proxy trung tâm dữ liệu chuyên dụng, máy chủ proxy dân dụng và máy chủ proxy cao cấp. Vậy, giải pháp khả thi nhất cho proxy HTTP tốt nhất để thu thập dữ liệu web cho các bài viết tin tức bằng python là gì? Trước khi trả lời những câu hỏi đó, tốt nhất là bạn nên xem các tính năng của từng máy chủ proxy.
Proxy trung tâm dữ liệu chuyên dụng phù hợp nhất cho các tác vụ trực tuyến tốc độ cao, chẳng hạn như truyền phát lượng dữ liệu lớn (về kích thước) từ nhiều máy chủ khác nhau cho mục đích phân tích. Đây là một trong những lý do chính khiến các tổ chức chọn proxy chuyên dụng để truyền lượng dữ liệu lớn trong thời gian ngắn.
Proxy trung tâm dữ liệu chuyên dụng có một số tính năng, chẳng hạn như băng thông không giới hạn và kết nối đồng thời, proxy HTTP chuyên dụng để giao tiếp dễ dàng và xác thực IP để bảo mật hơn. Với thời gian hoạt động 99,9%, bạn có thể yên tâm rằng trung tâm dữ liệu chuyên dụng sẽ luôn hoạt động trong bất kỳ phiên nào. Cuối cùng nhưng không kém phần quan trọng, ProxyScrape cung cấp dịch vụ chăm sóc khách hàng tuyệt vời và sẽ giúp bạn giải quyết vấn đề trong vòng 24-48 giờ làm việc.
Tiếp theo là proxy dân dụng. Proxy dân dụng là proxy dành cho mọi người dùng nói chung. Lý do chính là địa chỉ IP của proxy dân dụng giống với địa chỉ IP do ISP cung cấp. Điều này có nghĩa là việc xin phép máy chủ mục tiêu để truy cập dữ liệu của nó sẽ dễ dàng hơn bình thường.
Tính năng khác của ProxyScrape Proxy dân dụng là một tính năng luân phiên. Proxy luân phiên giúp bạn tránh bị cấm vĩnh viễn tài khoản vì proxy dân dụng của bạn thay đổi địa chỉ IP của bạn một cách động, khiến máy chủ đích khó kiểm tra xem bạn có đang sử dụng proxy hay không.
Ngoài ra, các tính năng khác của proxy dân dụng là: băng thông không giới hạn, cùng với kết nối đồng thời, proxy HTTP/s chuyên dụng, proxy tại bất kỳ phiên nào vì có hơn 7 triệu proxy trong nhóm proxy, xác thực tên người dùng và mật khẩu để bảo mật hơn và cuối cùng nhưng không kém phần quan trọng, khả năng thay đổi máy chủ quốc gia. Bạn có thể chọn máy chủ mong muốn bằng cách thêm mã quốc gia vào xác thực tên người dùng.
Cuối cùng là proxy cao cấp. Proxy cao cấp giống như proxy trung tâm dữ liệu chuyên dụng. Chức năng vẫn như cũ. Sự khác biệt chính là khả năng truy cập. Trong proxy cao cấp, danh sách proxy (danh sách chứa proxy) được cung cấp cho mọi người dùng trên ProxyScrape mạng. Đó là lý do tại sao proxy cao cấp có giá thấp hơn proxy trung tâm dữ liệu chuyên dụng.
Vậy, giải pháp khả thi nhất cho proxy HTTP tốt nhất để thu thập dữ liệu web cho các bài viết tin tức bằng python là gì? Câu trả lời sẽ là " proxy dân dụng ". Lý do rất đơn giản. Như đã nói ở trên, proxy dân dụng là proxy luân phiên, nghĩa là địa chỉ IP của bạn sẽ được thay đổi động trong một khoảng thời gian, điều này có thể hữu ích để đánh lừa máy chủ bằng cách gửi nhiều yêu cầu trong một khung thời gian nhỏ mà không bị chặn IP.
Tiếp theo, điều tốt nhất là thay đổi máy chủ proxy dựa trên quốc gia. Bạn chỉ cần thêm ISO_CODE quốc gia vào cuối xác thực IP hoặc xác thực tên người dùng và mật khẩu.
Đề xuất đọc:
Scrape YouTube Comments – 5 bước đơn giản 8 công cụ thu thập dữ liệu web Python tốt nhất năm 2023
Trong bài viết này, chúng ta đã thấy những điều cơ bản về web scraping bằng cách hiểu những điều cơ bản về thiết kế và cấu trúc luồng trang web. Chúng ta cũng đã có kinh nghiệm thực tế bằng cách trích xuất dữ liệu từ các bài báo. Web scraping có thể tạo nên điều kỳ diệu nếu được thực hiện đúng cách. Ví dụ, một mô hình được tối ưu hóa hoàn toàn có thể được tạo ra dựa trên dữ liệu được trích xuất có thể dự đoán các danh mục và hiển thị tóm tắt cho người dùng. Điều quan trọng nhất cần làm là tìm ra các yêu cầu của bạn và hiểu cấu trúc trang. Python có một số thư viện rất mạnh mẽ nhưng dễ sử dụng để trích xuất dữ liệu theo lựa chọn của bạn. Điều đó đã làm cho web scraping trở nên rất dễ dàng và thú vị.
Điều quan trọng cần lưu ý là mã này hữu ích để trích xuất dữ liệu từ trang web cụ thể này. Nếu chúng ta muốn thực hiện từ bất kỳ trang nào khác, chúng ta cần tối ưu hóa mã của mình theo cấu trúc của trang đó. Nhưng một khi chúng ta biết cách xác định chúng, quy trình hoàn toàn giống nhau.
Bài viết này hy vọng sẽ giải thích sâu hơn về cách tiếp cận thực tế của việc trích xuất dữ liệu web cho các bài viết tin tức bằng python. Một điều cần nhớ là proxy là điều cần thiết tuyệt đối cho việc trích xuất dữ liệu web. Nó giúp ngăn chặn mọi khối IP khỏi máy chủ mục tiêu. ProxyScrape cung cấp một proxy dân dụng tuyệt vời và đáng tin cậy cho việc trích xuất dữ liệu web cho các bài viết tin tức bằng các dự án python.