Làm cách nào để trích xuất một url cụ thể từ một trang web trong python?

Trích xuất URL đạt được từ một tệp văn bản bằng cách sử dụng cụm từ thông dụng. Biểu thức tìm nạp văn bản ở bất cứ nơi nào nó khớp với mẫu. Chỉ mô-đun re được sử dụng cho mục đích này

Ví dụ

Chúng tôi có thể lấy một tệp đầu vào có chứa một số URL và xử lý nó thông qua chương trình sau để trích xuất các URL. Hàm findall[] được sử dụng để tìm tất cả các trường hợp khớp với biểu thức chính quy

Tệp đầu vào

Hiển thị là tệp đầu vào bên dưới. Cái nào chứa teo URL

Now a days you can learn almost anything by just visiting //www.google.com. But if you are completely new to computers or internet then first you need to leanr those fundamentals. Next
you can visit a good e-learning site like - //www.tutorialspoint.com to learn further on a variety of subjects.

Bây giờ, khi chúng tôi lấy tệp đầu vào ở trên và xử lý nó thông qua chương trình sau, chúng tôi sẽ nhận được đầu ra được yêu cầu chỉ cung cấp các URL được trích xuất từ ​​​​tệp

Nếu bạn chưa quen với việc tìm kiếm trên web, tôi khuyên bạn nên bắt đầu với hướng dẫn dành cho người mới bắt đầu về tìm kiếm trên web và sau đó chuyển sang hướng dẫn này khi bạn cảm thấy thoải mái với những điều cơ bản

làm thế nào để chúng tôi trích xuất tất cả các liên kết?

Chúng tôi sẽ sử dụng thư viện yêu cầu để lấy trang HTML thô từ trang web và sau đó chúng tôi sẽ sử dụng BeautifulSoup để trích xuất tất cả các liên kết từ trang HTML

Trong hướng dẫn này, bạn sẽ học cách trích xuất tất cả các liên kết từ một trang web hoặc URL nhất định bằng BeautifulSoup và các yêu cầu

Nếu bạn chưa quen với việc tìm kiếm trên web, tôi khuyên bạn nên bắt đầu trước với hướng dẫn dành cho người mới bắt đầu về tìm kiếm trên web và sau đó chuyển sang hướng dẫn này khi bạn đã cảm thấy thoải mái với những điều cơ bản

Làm thế nào để chúng tôi trích xuất tất cả các liên kết?

Chúng tôi sẽ sử dụng thư viện yêu cầu để lấy trang HTML thô từ trang web và sau đó chúng tôi sẽ sử dụng BeautifulSoup để trích xuất tất cả các liên kết từ trang HTML

Yêu cầu

Để làm theo hướng dẫn này, bạn cần cài đặt các yêu cầu và thư viện Beautiful Soup

Cài đặt

$ pip install requests
$ pip install beautifulsoup4

Dưới đây là đoạn mã nhắc bạn nhập liên kết đến một trang web và sau đó nó sẽ sử dụng các yêu cầu để gửi yêu cầu GET đến máy chủ để yêu cầu trang HTML và sau đó sử dụng BeautifulSoup để trích xuất tất cả các thẻ liên kết trong HTML

import requests
from bs4 import BeautifulSoup
def extract_all_links[site]:
    html = requests.get[site].text
    soup = BeautifulSoup[html, 'html.parser'].find_all['a']
    links = [link.get['href'] for link in soup]
    return links
site_link = input['Enter URL of the site : ']
all_links = extract_all_links[site_link]
print[all_links]

đầu ra

[email protected]:~/$ python3 link_spider.py
Enter URL of the site: //kalebujordan.com/​
['#main-content', 'mailto://[email protected]', 
'//web.facebook.com/kalebu.jordan', '//twitter.com/j_kalebu',
'//kalebujordan.com/'.....]

Tôi hy vọng bạn thấy điều này hữu ích, vui lòng chia sẻ nó với các nhà phát triển đồng nghiệp của bạn

Trước đây đã xuất bản ở đây. https. // kalebujordan. com/learning-how-to-extract-all-links-from-a-website-in-python/

Tiết lộ. Bài đăng này có thể chứa các liên kết liên kết, nghĩa là khi bạn nhấp vào liên kết và mua hàng, chúng tôi sẽ nhận được hoa hồng

Trích xuất tất cả các liên kết của một trang web là một nhiệm vụ phổ biến giữa những người quét web. Thật hữu ích khi xây dựng các công cụ dọn dẹp nâng cao thu thập dữ liệu mọi trang của một trang web nhất định để trích xuất dữ liệu. Nó cũng có thể được sử dụng cho quy trình chẩn đoán SEO hoặc thậm chí là giai đoạn thu thập thông tin cho người kiểm tra thâm nhập

Trong hướng dẫn này, bạn sẽ tìm hiểu cách xây dựng công cụ trích xuất liên kết trong Python từ đầu chỉ bằng các yêu cầu và thư viện BeautifulSoup

Lưu ý rằng có rất nhiều công cụ trích xuất liên kết ngoài kia, chẳng hạn như Trình trích xuất liên kết của Sitechecker. Mục tiêu của hướng dẫn này là tự xây dựng một cái bằng ngôn ngữ lập trình Python

Được. Ethical Hacking với sách điện tử Python

Hãy cài đặt các phụ thuộc

pip3 install requests bs4 colorama

Chúng tôi sẽ sử dụng các yêu cầu để thực hiện các yêu cầu HTTP một cách thuận tiện, BeautifulSoup để phân tích cú pháp HTML và colorama để thay đổi màu văn bản

Mở một tệp Python mới và làm theo. Hãy nhập các mô-đun chúng ta cần

import requests
from urllib.parse import urlparse, urljoin
from bs4 import BeautifulSoup
import colorama

Chúng tôi sẽ sử dụng colorama chỉ để sử dụng các màu khác nhau khi in, để phân biệt giữa các liên kết bên trong và bên ngoài

# init the colorama module
colorama.init[]
GREEN = colorama.Fore.GREEN
GRAY = colorama.Fore.LIGHTBLACK_EX
RESET = colorama.Fore.RESET
YELLOW = colorama.Fore.YELLOW

Chúng tôi sẽ cần hai biến toàn cục, một cho tất cả các liên kết nội bộ của trang web và biến còn lại cho tất cả các liên kết bên ngoài

# initialize the set of links [unique links]
internal_urls = set[]
external_urls = set[]
  • Liên kết nội bộ là các URL liên kết đến các trang khác của cùng một trang web
  • Liên kết ngoài là các URL liên kết đến các trang web khác

Vì không phải tất cả các liên kết trong thẻ liên kết [thẻ a] đều hợp lệ [tôi đã thử nghiệm với điều này], một số là liên kết đến các phần của trang web và một số là javascript, vì vậy hãy viết một hàm để xác thực URL

________số 8

Điều này sẽ đảm bảo rằng một sơ đồ thích hợp [giao thức, e. g http hoặc https] và tên miền tồn tại trong URL

Bây giờ hãy xây dựng một hàm để trả về tất cả các URL hợp lệ của một trang web

def get_all_website_links[url]:
    """
    Returns all URLs that is found on `url` in which it belongs to the same website
    """
    # all URLs of `url`
    urls = set[]
    # domain name of the URL without the protocol
    domain_name = urlparse[url].netloc
    soup = BeautifulSoup[requests.get[url].content, "html.parser"]

Đầu tiên, tôi đã khởi tạo biến bộ url;

Thứ hai, tôi đã trích xuất tên miền từ URL. Chúng tôi sẽ cần nó để kiểm tra xem liên kết mà chúng tôi lấy là bên ngoài hay bên trong

Thứ ba, tôi đã tải xuống nội dung HTML của trang web và bọc nó bằng một đối tượng

import requests
from urllib.parse import urlparse, urljoin
from bs4 import BeautifulSoup
import colorama
3 để dễ dàng phân tích cú pháp HTML

Hãy lấy tất cả các thẻ HTML a [các thẻ neo chứa tất cả các liên kết của trang web]

$ pip install requests
$ pip install beautifulsoup4
1

Vì vậy, chúng tôi lấy thuộc tính href và kiểm tra xem có thứ gì ở đó không. Nếu không, chúng tôi chỉ tiếp tục đến liên kết tiếp theo

Vì không phải tất cả các liên kết đều tuyệt đối nên chúng tôi sẽ cần nối các URL tương đối với tên miền của chúng [e. g khi href là "/search" và url là "google. com", kết quả sẽ là "google. com/tìm kiếm"]

$ pip install requests
$ pip install beautifulsoup4
2

Bây giờ chúng ta cần xóa các tham số HTTP GET khỏi các URL, vì điều này sẽ gây ra sự dư thừa trong tập hợp, đoạn mã dưới đây xử lý điều đó

$ pip install requests
$ pip install beautifulsoup4
3

Hãy kết thúc chức năng

$ pip install requests
$ pip install beautifulsoup4
4

Có liên quan. Ethical Hacking với sách điện tử Python

Tất cả những gì chúng tôi đã làm ở đây là kiểm tra

  • Nếu URL không hợp lệ, hãy tiếp tục đến liên kết tiếp theo
  • Nếu URL đã có trong internal_urls, thì chúng tôi cũng không cần
  • Nếu URL là một liên kết bên ngoài, hãy in nó bằng màu xám và thêm nó vào bộ external_urls toàn cầu của chúng tôi và tiếp tục đến liên kết tiếp theo

Cuối cùng, sau tất cả các bước kiểm tra, URL sẽ là một liên kết nội bộ, chúng tôi in nó ra và thêm nó vào bộ url và internal_urls của chúng tôi

Hàm trên chỉ lấy link của 1 trang cụ thể, nếu muốn lấy tất cả link của cả website thì làm thế nào?

import requests
from urllib.parse import urlparse, urljoin
from bs4 import BeautifulSoup
import colorama
0

Hàm này thu thập trang web, có nghĩa là nó lấy tất cả các liên kết của trang đầu tiên và sau đó tự gọi đệ quy để theo dõi tất cả các liên kết được trích xuất trước đó. Tuy nhiên, điều này có thể gây ra một số vấn đề; . com. Kết quả là tôi đã thêm một tham số max_urls để thoát khi chúng tôi kiểm tra đến một số URL nhất định

Được rồi, hãy kiểm tra điều này; . Nếu không, tôi không chịu trách nhiệm cho bất kỳ tác hại nào bạn gây ra

import requests
from urllib.parse import urlparse, urljoin
from bs4 import BeautifulSoup
import colorama
1

Nhận -35 GIẢM GIÁ. Ethical Hacking với sách điện tử Python

Tôi đang thử nghiệm trên trang web này. Tuy nhiên, tôi rất khuyến khích bạn không làm điều đó;

Đây là một phần của đầu ra

Sau khi quá trình thu thập thông tin kết thúc, nó sẽ in tổng số liên kết được trích xuất và thu thập thông tin

import requests
from urllib.parse import urlparse, urljoin
from bs4 import BeautifulSoup
import colorama
2

Tuyệt vời, phải không?

Có một số trang web tải hầu hết nội dung của họ bằng JavaScript. Do đó, thay vào đó, chúng tôi cần sử dụng thư viện request_html, thư viện này cho phép chúng tôi thực thi Javascript bằng Chromium; . Kiểm tra nó

Yêu cầu cùng một trang web nhiều lần trong một khoảng thời gian ngắn có thể khiến trang web chặn địa chỉ IP của bạn. Trong trường hợp đó, bạn cần sử dụng máy chủ proxy cho các mục đích đó

Thay vào đó, nếu bạn quan tâm đến việc chụp ảnh, hãy xem hướng dẫn này. Cách tải xuống tất cả hình ảnh từ một trang web bằng Python hoặc nếu bạn muốn trích xuất các bảng HTML, hãy xem hướng dẫn này

Tôi đã chỉnh sửa mã một chút để bạn có thể lưu các URL đầu ra trong một tệp và chuyển các URL từ các đối số dòng lệnh. Tôi thực sự khuyên bạn nên kiểm tra mã hoàn chỉnh tại đây

Trong Ethical Hacking with Python EBook, chúng tôi đã sử dụng mã này để xây dựng một trình thu thập email nâng cao đi vào mọi liên kết được trích xuất và tìm kiếm địa chỉ email. Hãy chắc chắn để kiểm tra nó ở đây

Bạn muốn tìm hiểu thêm về Web Scraping?

Cuối cùng, nếu bạn muốn tìm hiểu sâu hơn về web scraping với các thư viện Python khác nhau, không chỉ BeautifulSoup, các khóa học dưới đây chắc chắn sẽ có giá trị cho bạn

Làm cách nào để lấy URL từ mã HTML Python?

urlopen[] để tạo urllib. đối tượng lớp yêu cầu tạo kết nối đến URL mong muốn. Chúng tôi chỉ định URL trong hàm urlopen[]. Sau đó, để lấy HTML từ URL trong Python, chúng ta sử dụng hàm read[] với đối tượng này .

Làm cách nào để lấy URL từ chuỗi trong Python?

Để tìm các URL trong một chuỗi nhất định, chúng tôi đã sử dụng hàm findall[] từ mô-đun biểu thức chính quy của Python . Điều này trả về tất cả các kết quả khớp mẫu không chồng chéo trong chuỗi, dưới dạng danh sách các chuỗi. Chuỗi được quét từ trái sang phải và kết quả khớp được trả về theo thứ tự tìm thấy.

Chủ Đề