Nhận liên kết Python BeautifulSoup

BeautifulSoup là thư viện Python của bên thứ ba được sử dụng để phân tích dữ liệu từ các trang web. Nó giúp quét web, đây là một quá trình trích xuất, sử dụng và thao tác dữ liệu từ các tài nguyên khác nhau

Show

Quét web cũng có thể được sử dụng để trích xuất dữ liệu cho mục đích nghiên cứu, hiểu/so sánh xu hướng thị trường, thực hiện giám sát SEO, v.v.

Có thể chạy dòng dưới đây để cài đặt BeautifulSoup trên Windows -

pip install beautifulsoup4

Sau đây là một ví dụ -

Thí dụ

from bs4 import BeautifulSoup
import requests
url = "https://en.wikipedia.org/wiki/Algorithm"
req = requests.get(url)
soup = BeautifulSoup(req.text, "html.parser")
print("The href links are :")
for link in soup.find_all('a'):
   print(link.get('href'))

đầu ra

The href links are :
…
https://stats.wikimedia.org/#/en.wikipedia.org
https://foundation.wikimedia.org/wiki/Cookie_statement
https://wikimediafoundation.org/
https://www.mediawiki.org/

Giải trình

  • Các gói cần thiết được nhập và đặt bí danh

  • Trang web được xác định

  • URL được mở và dữ liệu được đọc từ đó

  • Chức năng 'BeautifulSoup' được sử dụng để trích xuất văn bản từ trang web

  • Chức năng 'find_all' được sử dụng để trích xuất văn bản từ dữ liệu trang web

  • Các liên kết href được in trên bảng điều khiển

Nhận liên kết Python BeautifulSoup


Nhận liên kết Python BeautifulSoup

Gần đây tôi muốn lấy tất cả các liên kết trong kho lưu trữ các bản tin. Mục tiêu là có một tệp văn bản với các liên kết để tôi không phải xem từng bản tin theo cách thủ công

Đây là một ví dụ trong thế giới thực vì vậy tôi muốn nó nhanh chóng và dễ dàng. Đây là cách tôi thực sự đã làm với python

Gói quét web tốt nhất cho python trong BeautifulSoup. Và gói tốt nhất để thực hiện cuộc gọi url là Yêu cầu

pip install beautifulsoup4, requests

Tôi đã làm tất cả công việc của python trong sổ ghi chép jupyter. Tôi có xu hướng sử dụng jupyter nếu tôi đang thử nghiệm với python hoặc tạo một tập lệnh nhanh. Nhưng bạn chắc chắn có thể làm điều tương tự trong một. py hoặc trình chỉnh sửa mã

Nhập các gói

from bs4 import BeautifulSoup
import requests

Lấy danh sách các trang trong kho lưu trữ bản tin
Lấy html từ trang lưu trữ bản tin. Tôi đã chọn một trang lưu trữ ngẫu nhiên từ internet chỉ với mục đích trình diễn.

URL = "https://www.comnetwork.org/newsletter-archive/"
page = requests.get(URL)
soup = BeautifulSoup(page.content, "html.parser")
for a_href in soup.find_all("a", href=True):
print(a_href["href"])

Vì sẽ không chỉ có các liên kết bản tin trong kho lưu trữ bản tin, tôi chỉ cần in tất cả chúng ra và dán chúng vào vim (nhưng bạn có thể sử dụng bất kỳ trình soạn thảo văn bản nào). Sau đó, tôi đã xóa bất kỳ thứ gì trông không giống liên kết bản tin

Có nhiều cách tốt hơn để làm điều này. Thay vào đó, bạn có thể thêm vào danh sách trong python nếu bạn biết liên kết bản tin bắt đầu bằng gì. Nhưng tại thời điểm này, tôi nghĩ rằng sẽ nhanh hơn nếu thực hiện công việc theo cách thủ công

Tôi nhận thấy rằng tất cả các trang bản tin đều bắt đầu bằng mailchi. mp

Vì vậy, tôi đã xóa mọi thứ khác và thêm dấu ngoặc kép xung quanh các liên kết và dấu phẩy sau các liên kết

Khi tôi hoàn thành, tôi đã dán lại các liên kết vào python

Bây giờ tôi đã có một danh sách các liên kết bản tin. Đây là một mẫu

archive_links = ["http://mailchi.mp/4bd5002a15e1/february2018", "http://mailchi.mp/comnetwork/16may2018"]

Lấy tất cả các liên kết từ tất cả các trang
Bước cuối cùng là lấy tất cả các liên kết trên tất cả các trang bản tin đó và lưu chúng vào tệp văn bản.

for link in archive_links:
page = requests.get(link)
soup = BeautifulSoup(page.content, "html.parser")
for a_href in soup.find_all("a", href=True):
with open("newsletter_links.txt", "a") as linkfile:
linkfile.write(a_href["href"]+"\n")

Sử dụng vòng lặp for để duyệt qua danh sách. Lấy html từ mỗi trang. Tìm tất cả các liên kết. Và viết chúng vào một tập tin văn bản

Lưu ý rằng tôi sử dụng open để ghi tệp văn bản. With được khuyên dùng vì nó tự động đóng tệp khi hoàn thành. Có một chữ "a" ở phần mở vì tôi đang nối thêm từng liên kết và không ghi đè lên. “\n” là ký tự dòng mới. Nó đặt mỗi liên kết trên một dòng riêng biệt

Tại thời điểm này bản tin_links. txt nếu chứa đầy tất cả các liên kết từ tất cả các bản tin, kể cả những thứ tôi không cần. Vì vậy, tôi đã đi vào tập tin văn bản. Sắp xếp các liên kết. Và xóa bất cứ thứ gì mà tôi không muốn

Bạn có thể xem video hướng dẫn đầy đủ về quy trình của tôi tại đây

Nếu bạn yêu thích trăn và bạn biết mình yêu thích, hãy xem trang web tham khảo Pyspark của tôi và các câu chuyện phương tiện khác của tôi