Quét web cho các bài báo bằng Python - Cách tốt nhất vào năm 2024

Trăn, Tháng Giêng-04-20235 phút đọc

Tin tức là cách tốt nhất để tìm hiểu những gì đang xảy 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 sâu sắc hơn và đó là cách duy nhất để đổi mới công nghệ của chúng tôi và đưa nhân loại của chúng tôi 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 xảy 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 sâu sắc hơn và đó là cách duy nhất để đổi mới công nghệ của chúng tôi và đưa nhân loại của chúng tôi 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 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à web scraping cho các bài báo sử dụng python.

Trong bài viết này, chúng tôi sẽ tạo một trình quét web để cạo các bài báo mới nhất từ các tờ báo khác nhau và lưu trữ chúng dưới dạng văn bản. Chúng ta sẽ đi qua hai bước sau để có một phân tích chuyên sâu về cách toàn bộ quá trình được thực hiện.

Giới thiệu cấp độ bề mặt cho các trang web và HTML. Quét web bằng Python và thư viện nổi tiếng có tên BeautifulSoup.

Vui lòng chuyển đến bất kỳ phần nào để tìm hiểu thêm về cách thực hiện quét web cho các bài báo bằng python

Mục lục

Giới thiệu cấp độ bề mặt về các trang web và HTML

Nếu chúng tôi muốn rút thông tin quan trọng từ 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 tôi 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 xác định nội dung của trang web. Đây là ngôn ngữ đánh dấu tiê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 làm đ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 xử lý logic và chức năng 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 tôi 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 của một 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 trong khi tạo trình quét web này. Bạn không cần phải biết tất cả mọi thứ mà chỉ cần những điều cơ bản của thiết kế trang web và cách thông tin được chứa trong đó, và chúng tôi rất tốt để đi.

Bài viết tin tức về Web Scraping Sử dụng BeautifulSoup trong Python

Python có một số gói cho phép chúng tôi thu thập thông tin từ một trang web. Chúng tôi sẽ tiếp tục với BeautifulSoup vì nó là một trong những thư viện Python nổi tiếng và dễ sử dụng nhất để quét web.

BeautifulSoup là tốt nhất để phân tích cú pháp nội dung HTML của URL và truy cập nó bằng các 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 tôi có thể làm điều kỳ diệu và trích xuất bất kỳ loại văn bản nào trên trang web của chúng tôi lựa chọn từ internet, điều này cho thấy đây là một gói dễ sử dụng nhưng mạnh mẽ.

Chúng tôi bắt đầu từ những điều cơ bản. Để 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 'mô-đun yêu cầu' vì nó cung cấp BeautifulSoup với 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

Mô-đun 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 gói BeautfulSoup. Hai lệnh sẽ làm cho 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à attribute làm tham số của nó và cho phép chúng ta định vị bất kỳ phần tử HTML nào từ một trang web. Nó sẽ xác định tất cả các yếu tố cùng loại. Thay vào đó, chúng ta có thể sử dụng find() để chỉ lấy cái đầu tiên.

get_text(): Khi chúng ta đã xác định được một 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 của chúng tôi và xác định vị trí các phần tử chúng tôi muốn cạo, chúng tôi có thể sử dụng tùy chọn 'kiểm tra phần tử' 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 chúng tôi xác định vị trí các phần tử quan tâm, chúng tôi sẽ nhận được mã HTML với mô-đun yêu cầu và để giải nén các phần tử đó, chúng tôi 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ẽ cạo các tiêu đề bài báo từ trang nhất 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

Khi chúng ta nhận được nội dung HTML bằng cách sử dụng mô-đun yêu cầu, chúng ta có thể lưu nó vào biến trang bìa:

# Yêu cầu
r1 = requests.get(url)
r1.status_code
 
# Chúng tôi sẽ lưu trong trang bìa nội dung trang bìa
trang bìa = r1.content

Tiếp theo, chúng ta sẽ định nghĩa biến súp,

# Súp tạo
súp1 = BeautifulSoup (trang bìa, 'html5lib')

Trong dòng mã sau, chúng tôi sẽ xác định vị trí các phần tử chúng tôi đ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 tôi đang nhận được tất cả các sự 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:

coverpage_news[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,

coverpage_news[4]['href']

Điều này sẽ cho phép chúng tôi lấy liên kết ở dạng văn bản thuần túy.

Nếu bạn đã nắm bắt tất cả các khái niệm cho đến thời điểm này, bạn có thể quét web bất kỳ nội dung nào bạn chọn.

Bước tiếp theo liên quan đến việc truy cập từng nội dung của bài báo bằng thuộc tính href, lấy mã nguồn để tìm các đoạn trong mã HTML và cuối cùng nhận được chúng với BeautifulSoup. Đó là quá 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 dưới đây. Tôi sẽ không giải thích từng dòng riêng biệt khi mã được nhận xét; Người ta có thể hiểu rõ nó bằng cách đọc những bình luận đó.

number_of_articles = 5
# Danh sách trống cho nội dung, liên kết và tiêu đề
news_contents = []
list_links = []
list_titles = []
 
Với n trong np.arange(0, number_of_articles):
    
# chỉ các bài báo (cũng có album và những thứ khác)nếu "inenglish" không có trong coverpage_news[n].find('a')['href']:  
        continue# Lấy link của link bài viết = coverpage_news[n].find('a')['href']
    list_links.append(liên kết)
    
# Lấy tiêu đề
    title = coverpage_news[n].find('a').get_text()
    list_titles.append(title)
    
# Đọc nội dung (nó được chia thành các đoạn)
    article = requests.get(liên kết)
    article_content = article.content
    soup_article = BeautifulSoup(article_content, 'html5lib')
    body = soup_article.find_all('div', class_='articulo-cuerpo')
    x = cơ thể[0].find_all('p')
    
# Thống nhất các đoạn văn
    list_paragraphs = []
    với p trong np.arange(0, len(x)):
        đoạn = x[p].get_text()
        list_paragraphs.Phụ lục (đoạn)
        final_article = " ". tham gia(list_paragraphs)
        
news_contents.Phụ lục(final_article)

Hãy đặt các bài viết được trích xuất vào như sau:

  • Một tập dữ liệu sẽ nhập các mô hình (df_features).
  • Tập dữ liệu có tiêu đề và liên kết (df_show_info).
# 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_info

Để 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 tập lệnh cần để nhận tin tức. Chúng ta sẽ định nghĩa 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 mọi dòng mã khi mã được nhận xét. Để hiểu rõ hơn, bạn có thể đọc những bình luận đó.

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)

Proxy nào tốt nhất để quét web cho các bài báo sử dụng Python?

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ì vậy, giải pháp tốt nhất có thể cho proxy HTTP tốt nhất để quét web cho các bài báo sử dụng python là gì? Trước khi trả lời câu hỏi đó, tốt nhất bạn nên xem các tính năng của từng máy chủ proxy.

Một 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 một lượng lớn dữ liệu (về kích thước) từ các máy chủ khác nhau cho mục đích phân tích. Đó 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 một lượng lớn dữ liệu trong một khoảng thời gian ngắn.

Một 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 99,9% thời gian hoạt động, 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ụ khách hàng tuyệt vời và sẽ giúp bạn giải quyết vấn đề của mình trong vòng 24-48 giờ làm việc. 

Tiếp theo là proxy dân cư. Khu dân cư là một proxy đi đến cho mọi người tiêu dùng nói chung. Lý do chính là địa chỉ IP của proxy khu dân cư 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. 

Các tính năng khác của ProxyScrapeProxy khu dân cư của là một tính năng xoay. Proxy xoay vòng giúp bạn tránh bị cấm vĩnh viễn đối với tài khoản của mình vì proxy khu dân cư của bạn tự động thay đổi địa chỉ IP của bạn, 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 cư 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 bất cứ lúc nào vì 7 triệu cộng với 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 của mình bằng cách thêm mã quốc gia vào xác thực tên người dùng. 

Cái cuối cùng là proxy cao cấp. Proxy cao cấp cũng giống như proxy trung tâm dữ liệu chuyên dụng. Các chức năng vẫn giữ nguyên. Sự khác biệt chính là khả năng tiếp cận. 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ưới. Đó là lý do tại sao các proxy cao cấp có chi phí thấp hơn so với proxy trung tâm dữ liệu chuyên dụng.

Vì vậy, giải pháp tốt nhất có thể cho proxy HTTP tốt nhất để quét web cho các bài báo sử dụng python là gì? Câu trả lời sẽ là "proxy dân cư". Lý do rất đơn giản. Như đã nói ở trên, proxy khu dân cư là một proxy luân phiên, có 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 nhận được khối IP. 

Tiếp theo, điều tốt nhất sẽ là thay đổi máy chủ proxy dựa trên quốc gia. Bạn chỉ cần thêm quốc gia ISO_CODE 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 nhận xét trên YouTube - 5 bước đơn giảnTop 8 công cụ cạo web Python tốt nhất năm 2023

Câu hỏi thường gặp:

1. Cách tốt nhất để cạo các bài báo bằng python là gì?
Thư viện python được gọi là "BeautifulSoup" và có thể tự động cạo dữ liệu từ bất kỳ bài báo nào. Yêu cầu duy nhất sẽ là kiến thức cơ bản về HTML để định vị thẻ HTML từ mã nguồn trang có chứa dữ liệu cần được cạo.
2. Có thể cạo các bài báo từ trang web không?
Câu trả lời là nó phụ thuộc vào các điều khoản và điều kiện của trang web. Nhưng hầu hết các bài báo có thể được loại bỏ vì tất cả thông tin được cố ý cung cấp cho công chúng. Tất cả dữ liệu công khai có thể được cạo miễn là phương pháp cạo của bạn không gây hại cho dữ liệu hoặc chủ sở hữu trang web.
3. Làm cách nào để quét Google Tin tức bằng Python?
Bạn có thể cạo Google Tin tức hoặc bất kỳ bài báo nào bằng python với sự trợ giúp của thư viện python có tên là "BeautifulSoup". Cài đặt thư viện và proxy dân cư đáng tin cậy để ngăn chặn khối IP từ máy chủ đích.

Tổng kết

Trong bài viết này, chúng ta đã thấy những điều cơ bản về quét web 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 tôi cũng đã thực hiện 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ể làm 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 thực hiện 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 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 bạn chọn. Điều đó đã làm cho việc quét web trở nên rất dễ dàng và thú vị.  

Điều quan trọng cần lưu ý là mã này rất hữu ích để trích xuất dữ liệu từ trang web cụ thể này. Nếu chúng ta muốn làm điều đó 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, quá trình này 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 web scraping cho các bài báo sử dụng python. Một điều cần nhớ là proxy là một điều cần thiết tuyệt đối cho việc quét web. Nó giúp ngăn chặn bất kỳ khối IP nào từ máy chủ đích. ProxyScrape Cung cấp một proxy dân cư tuyệt vời và đáng tin cậy để quét web của bạn cho các bài báo sử dụng các dự án Python.