Hướng dẫn get text from url python - lấy văn bản từ url python

Chỉnh sửa 09/2016: Trong Python 3 và UP Sử dụng urllib.request thay vì urllib2

Trên thực tế, cách đơn giản nhất là:

import urllib2  # the lib that handles the url stuff

data = urllib2.urlopen(target_url) # it's a file like object and works just like a file
for line in data: # files are iterable
    print line

Bạn thậm chí không cần "đọc lại", như đã đề xuất. Bạn thậm chí có thể rút ngắn nó thành: *

import urllib2

for line in urllib2.urlopen(target_url):
    print line

Nhưng hãy nhớ trong Python, vấn đề dễ đọc.

Tuy nhiên, đây là cách đơn giản nhất nhưng không phải là cách an toàn vì hầu hết thời gian với lập trình mạng, bạn không biết liệu lượng dữ liệu mong đợi có được tôn trọng hay không. Vì vậy, bạn thường đọc tốt hơn một lượng dữ liệu cố định và hợp lý, một cái gì đó bạn biết là đủ cho dữ liệu bạn mong đợi nhưng sẽ ngăn chặn kịch bản của bạn bị ngập lụt:

import urllib2

data = urllib2.urlopen("http://www.google.com").read(20000) # read only 20 000 chars
data = data.split("\n") # then split it into lines

for line in data:
    print line

* Ví dụ thứ hai trong Python 3:

import urllib.request  # the lib that handles the url stuff

for line in urllib.request.urlopen(target_url):
    print(line.decode('utf-8')) #utf-8 or iso8859-1 or whatever the page encoding scheme is

Khi thực hiện phân tích nội dung ở quy mô, bạn sẽ cần tự động trích xuất nội dung văn bản từ các trang web.

Trong bài viết này, bạn sẽ học cách trích xuất nội dung văn bản từ các trang web đơn và nhiều trang web bằng Python.


!pip install beautifulsoup4
!pip install numpy
!pip install requests
!pip install spacy
!pip install trafilatura

NB: Nếu bạn viết bài này trong một tệp Python tiêu chuẩn, bạn đã thắng được cần phải bao gồm! Biểu tượng. Điều này chỉ vì hướng dẫn này được viết trong một cuốn sổ Jupyter.


Đầu tiên, chúng tôi sẽ chia vấn đề thành nhiều giai đoạn:

  1. Trích xuất tất cả nội dung HTML bằng cách sử dụng các yêu cầu vào từ điển Python.
  2. Chuyển mỗi trang HTML cho Trafilatura để phân tích nội dung văn bản.
  3. Thêm lỗi và xử lý ngoại lệ để nếu Trafilatura thất bại, chúng ta vẫn có thể trích xuất nội dung, mặc dù có cách tiếp cận kém chính xác hơn.

from bs4 import BeautifulSoup
import json
import numpy as np
import requests
from requests.models import MissingSchema
import spacy
import trafilatura

Thu thập nội dung HTML từ trang web

urls = ['https://understandingdata.com/',
      'https://sempioneer.com/',]
data = {}

for url in urls:
    # 1. Obtain the response:
    resp = requests.get(url)
    
    # 2. If the response content is 200 - Status Ok, Save The HTML Content:
    if resp.status_code == 200:
        data[url] = resp.text

Sau khi thu thập tất cả các yêu cầu có trạng thái_code 200, giờ đây chúng tôi có thể áp dụng một số nỗ lực để trích xuất nội dung văn bản từ mọi yêu cầu.

Đầu tiên, chúng tôi sẽ cố gắng sử dụng & nbsp; trafilatura, tuy nhiên nếu thư viện này không thể trích xuất văn bản, thì chúng tôi sẽ sử dụng BeautifulSoup4 như một dự phòng.

def beautifulsoup_extract_text_fallback(response_content):
    
    '''
    This is a fallback function, so that we can always return a value for text content.
    Even for when both Trafilatura and BeautifulSoup are unable to extract the text from a 
    single URL.
    '''
    
    # Create the beautifulsoup object:
    soup = BeautifulSoup(response_content, 'html.parser')
    
    # Finding the text:
    text = soup.find_all(text=True)
    
    # Remove unwanted tag elements:
    cleaned_text = ''
    blacklist = [
        '[document]',
        'noscript',
        'header',
        'html',
        'meta',
        'head', 
        'input',
        'script',
        'style',]

    # Then we will loop over every item in the extract text and make sure that the beautifulsoup4 tag
    # is NOT in the blacklist
    for item in text:
        if item.parent.name not in blacklist:
            cleaned_text += '{} '.format(item)
            
    # Remove any tab separation and strip the text:
    cleaned_text = cleaned_text.replace('\t', '')
    return cleaned_text.strip()
    

def extract_text_from_single_web_page(url):
    
    downloaded_url = trafilatura.fetch_url(url)
    try:
        a = trafilatura.extract(downloaded_url, json_output=True, with_metadata=True, include_comments = False,
                            date_extraction_params={'extensive_search': True, 'original_date': True})
    except AttributeError:
        a = trafilatura.extract(downloaded_url, json_output=True, with_metadata=True,
                            date_extraction_params={'extensive_search': True, 'original_date': True})
    if a:
        json_output = json.loads(a)
        return json_output['text']
    else:
        try:
            resp = requests.get(url)
            # We will only extract the text from successful requests:
            if resp.status_code == 200:
                return beautifulsoup_extract_text_fallback(resp.content)
            else:
                # This line will handle for any failures in both the Trafilature and BeautifulSoup4 functions:
                return np.nan
        # Handling for any URLs that don't have the correct protocol
        except MissingSchema:
            return np.nan

single_url = 'https://understandingdata.com/'
text = extract_text_from_single_web_page(url=single_url)
print(text)

Hãy để sử dụng danh sách hiểu với chức năng văn bản đơn_extract của chúng tôi để dễ dàng trích xuất văn bản từ nhiều trang web:

import urllib2

for line in urllib2.urlopen(target_url):
    print line
0
import urllib2

for line in urllib2.urlopen(target_url):
    print line
1

Thông báo & nbsp; làm thế nào chúng tôi đảm bảo rằng bất kỳ URL nào thất bại đều có thể dễ dàng bị xóa khi chúng tôi đã trả về NP.Nan (không phải là một số).how we’ve made sure that any URL that failed can easily be removed as we’ve returned np.nan (not a number).


Làm sạch văn bản thô của chúng tôi từ nhiều trang web

Sau khi bạn trích xuất thành công các tài liệu văn bản thô, hãy để xóa bất kỳ trang web nào không thành công:

import urllib2

for line in urllib2.urlopen(target_url):
    print line
2

Ngoài ra, bạn có thể muốn làm sạch văn bản để phân tích thêm. Ví dụ: & nbsp; tokenising nội dung văn bản & nbsp; cho phép bạn phân tích tình cảm, cấu trúc câu, phụ thuộc ngữ nghĩa và cả số lượng từ.

import urllib2

for line in urllib2.urlopen(target_url):
    print line
3
import urllib2

for line in urllib2.urlopen(target_url):
    print line
4

Sự kết luận

Hy vọng bây giờ bạn có thể dễ dàng trích xuất nội dung văn bản từ một URL hoặc nhiều URL.

Chúng tôi cũng bao gồm BeautifulSoup như một chức năng thất bại/dự phòng. Điều này đảm bảo rằng mã của chúng tôi ít mong manh hơn và có thể chịu được các lỗi sau:

  • URL không hợp lệ.
  • URL có mã trạng thái thất bại (không phải 200).
  • Loại bỏ tất cả các URL mà chúng tôi không thể trích xuất nội dung văn bản.

Phản ứng của bạn là gì?

Trang web này chứa các liên kết đến một số trang web của bên thứ ba được mô tả là liên kết liên kết. Các liên kết liên kết này cho phép chúng tôi có được một khoản hoa hồng nhỏ khi bạn nhấp và mua sản phẩm trên các trang web đó (nó không tốn kém gì thêm!). AttackData.com là người tham gia Chương trình Associates Associates của Amazon Services, một chương trình quảng cáo liên kết được thiết kế để cung cấp phương tiện cho chủ sở hữu trang web để kiếm phí quảng cáo bằng cách quảng cáo và liên kết với Amazon và bất kỳ trang web nào khác có thể liên kết với chương trình AMAZON Service LLC Associates .