Hướng dẫn remove special characters from url python - xóa các ký tự đặc biệt khỏi url python

Tôi đang viết một mã Python để trích xuất tất cả các URL từ một tệp đầu vào, có nội dung hoặc văn bản từ Twitter (tweet). Tuy nhiên, trong khi làm như vậy, tôi nhận ra rằng một số URL được trích xuất trong danh sách Python có 'ký tự đặc biệt' hoặc 'dấu chấm câu' về cuối, vì tôi không thể phân tích lại chúng để có liên kết URL cơ sở. Câu hỏi của tôi là: 'Làm cách nào để xác định và xóa các ký tự đặc biệt từ cuối mỗi URL trong danh sách của tôi'?

Sản lượng hiện tại:

['https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u'', 'https://twitter.com/GVNyqWEu5u@#', 'https://twitter.com/GVNyqWEu5u"']

Kết quả mong muốn:

['https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u']

Bạn sẽ đánh giá cao rằng không phải tất cả các yếu tố trong danh sách 'đầu ra hiện tại' đều có ký tự / dấu câu đặc biệt về cuối. Nhiệm vụ là xác định và xóa các ký tự / dấu chấm câu từ các yếu tố danh sách có chúng.

Tôi đang sử dụng Regex sau để trích xuất URL Twitter từ văn bản tweet: lst = re.findall('(http.?://[^\s]+)', text) Tôi có thể xóa các ký tự / dấu câu đặc biệt vào cuối URL, trong bước này không?

Mã đầy đủ:

import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup
from socket import timeout
import ssl
import re
import csv

ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

count = 0
file = "Test.CSV"
with open(file,'r', encoding='utf-8') as f, open('output_themes_1.csv', 'w', newline='', encoding='utf-8') as ofile:
    next(f)
    reader = csv.reader(f)
    writer = csv.writer(ofile)
    fir = 'S.No.', 'Article_Id', 'Validity', 'Content', 'Geography', 'URL'
    writer.writerow(fir)
    for line in reader:
        count = count+1
        text = line[5]
        lst = re.findall('(http.?://[^\s]+)', text)
        if not lst:
            x = count, line[0], 'Empty List', text, line[8], line[6]
            print (x)
            writer.writerow(x)
        else:
            try:
                for url in lst:
                    try:
                        html = urllib.request.urlopen(url, context=ctx, timeout=60).read()
                        #html = urllib.request.urlopen(urllib.parse.quote(url, errors='ignore'), context=ctx).read()
                        soup = BeautifulSoup(html, 'html.parser')
                        title = soup.title.string
                        str_title = str (title)
                        if 'Twitter' in str_title:
                            if len(lst) > 1: break
                            else: continue
                        else:
                            y = count, line[0], 'Parsed', str_title, line[8], url
                            print (y)
                            writer.writerow(y)
                    except UnicodeEncodeError as e:
                        b_url = url.encode('ascii', errors='ignore')
                        n_url = b_url.decode("utf-8")
                        try:
                            html = urllib.request.urlopen(n_url, context=ctx, timeout=90).read()
                            soup = BeautifulSoup(html, 'html.parser')
                            title = soup.title.string
                            str_title = str (title)
                            if 'Twitter' in str_title:
                                if len(lst) > 1: break
                                else: continue
                            else:
                                z = count, line[0], 'Parsed_2', str_title, line[8], url
                                print (z)
                                writer.writerow(z)
                        except Exception as e:
                            a = count, line[0], str(e), text, line[8], url
                            print (a)
                            writer.writerow(a)
            except Exception as e:
                b = count, line[0], str(e), text, line[8], url
                print (b)
                writer.writerow(b)
print ('Total Rows Analyzed:', count)

Trong hướng dẫn này, bạn sẽ học cách sử dụng Python để loại bỏ các ký tự đặc biệt khỏi chuỗi. Nhiều lần, khi làm việc với các chuỗi, bạn sẽ gặp các chuỗi với các ký tự đặc biệt. Những điều này có thể gây ra vấn đề khi bạn đang cố gắng tiến hành phân tích văn bản, chẳng hạn như xử lý ngôn ngữ tự nhiên. Bởi vì điều này, biết cách sử dụng Python để loại bỏ các ký tự đặc biệt khỏi chuỗi là một kỹ năng quan trọng.

Bắt đầu nào!

Câu trả lời nhanh: Sử dụng RE Sub

Hướng dẫn remove special characters from url python - xóa các ký tự đặc biệt khỏi url python

Xóa các ký tự đặc biệt bao gồm các chuỗi sử dụng python isalnum

Python có một phương thức chuỗi đặc biệt, .isalnum(), trả về True nếu chuỗi là ký tự alpha-numeric và trả về

['https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u']
0 nếu không. Chúng ta có thể sử dụng điều này, để lặp qua một chuỗi và nối vào một chuỗi mới, chỉ có các ký tự alpha-numeric.

Hãy cùng xem ví dụ này trông như thế nào:

# Remove Special Characters from a String Using .isalnum()

text = 'datagy -- is. great!'
new_text = ''

for character in text:
    if character.isalnum():
        new_text += character

print(new_text)

# Returns: datagyisgreat

Hãy cùng xem những gì chúng tôi đã làm ở đây:

  1. Chúng tôi khởi tạo hai chuỗi: một chuỗi chứa chuỗi cũ của chúng tôi và một chuỗi trống
  2. Chúng tôi lặp qua từng ký tự trong chuỗi của chúng tôi và đánh giá xem nó có phải là chữ và số không, sử dụng phương pháp .isalnum()
  3. Nếu có, chúng tôi thêm ký tự vào chuỗi của chúng tôi. Nếu nó không, chúng tôi không làm gì cả.

Trong ví dụ tiếp theo, bạn sẽ học cách linh hoạt hơn một chút (chẳng hạn như giữ không gian), bằng cách sử dụng thư viện biểu thức thông thường Python,

['https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u']
2.

Bạn muốn tìm hiểu làm thế nào để sử dụng chức năng Python

['https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u']
3 để lặp qua hai danh sách? Hướng dẫn này dạy cho bạn chính xác những gì chức năng
['https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u']
3 thực hiện và cho bạn thấy một số cách sáng tạo để sử dụng chức năng.
This tutorial teaches you exactly what the
['https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u']
3 function does and shows you some creative ways to use the function.

Xóa các ký tự đặc biệt bằng cách sử dụng các biểu thức thông thường Python

Thư viện biểu thức thông thường Python,

['https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u']
2, đi kèm với một số phương pháp hữu ích để thao tác chuỗi. Một trong những phương pháp này là phương pháp
['https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u']
6 cho phép chúng tôi thay thế các chuỗi bằng một chuỗi khác.

Một trong những đặc quyền của thư viện

['https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u']
2 là chúng tôi không cần chỉ định chính xác nhân vật chúng tôi muốn thay thế. Bởi vì điều này, chúng ta có thể đặt phạm vi ký tự để thay thế (hoặc giữ).

Ví dụ: để giữ tất cả các ký tự và không gian chữ và số, chúng tôi chỉ cần nói với phương thức

['https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u']
6 để thay thế bất cứ thứ gì ngoại trừ
['https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u']
9.

Hãy để xem những gì nó trông như thế nào trong Python:

# Remove Special Characters from a String Using re.sub()
import re

text = 'datagy -- is. great!'
new_text = re.sub(r"[^a-zA-Z0-9 ]", "", text)

print(new_text)

# Returns: datagy  is great

Hãy cùng khám phá những gì chúng tôi đã làm ở đây:

  1. Chúng tôi đã tải chuỗi của chúng tôi vào một biến
  2. Chúng tôi đã sử dụng phương pháp
    import urllib.request, urllib.parse, urllib.error
    from bs4 import BeautifulSoup
    from socket import timeout
    import ssl
    import re
    import csv
    
    ctx = ssl.create_default_context()
    ctx.check_hostname = False
    ctx.verify_mode = ssl.CERT_NONE
    
    count = 0
    file = "Test.CSV"
    with open(file,'r', encoding='utf-8') as f, open('output_themes_1.csv', 'w', newline='', encoding='utf-8') as ofile:
        next(f)
        reader = csv.reader(f)
        writer = csv.writer(ofile)
        fir = 'S.No.', 'Article_Id', 'Validity', 'Content', 'Geography', 'URL'
        writer.writerow(fir)
        for line in reader:
            count = count+1
            text = line[5]
            lst = re.findall('(http.?://[^\s]+)', text)
            if not lst:
                x = count, line[0], 'Empty List', text, line[8], line[6]
                print (x)
                writer.writerow(x)
            else:
                try:
                    for url in lst:
                        try:
                            html = urllib.request.urlopen(url, context=ctx, timeout=60).read()
                            #html = urllib.request.urlopen(urllib.parse.quote(url, errors='ignore'), context=ctx).read()
                            soup = BeautifulSoup(html, 'html.parser')
                            title = soup.title.string
                            str_title = str (title)
                            if 'Twitter' in str_title:
                                if len(lst) > 1: break
                                else: continue
                            else:
                                y = count, line[0], 'Parsed', str_title, line[8], url
                                print (y)
                                writer.writerow(y)
                        except UnicodeEncodeError as e:
                            b_url = url.encode('ascii', errors='ignore')
                            n_url = b_url.decode("utf-8")
                            try:
                                html = urllib.request.urlopen(n_url, context=ctx, timeout=90).read()
                                soup = BeautifulSoup(html, 'html.parser')
                                title = soup.title.string
                                str_title = str (title)
                                if 'Twitter' in str_title:
                                    if len(lst) > 1: break
                                    else: continue
                                else:
                                    z = count, line[0], 'Parsed_2', str_title, line[8], url
                                    print (z)
                                    writer.writerow(z)
                            except Exception as e:
                                a = count, line[0], str(e), text, line[8], url
                                print (a)
                                writer.writerow(a)
                except Exception as e:
                    b = count, line[0], str(e), text, line[8], url
                    print (b)
                    writer.writerow(b)
    print ('Total Rows Analyzed:', count)
    
    0 để thay thế. Ở đây, hàm có ba đối số: (1) mẫu chúng tôi muốn thay thế (chúng tôi đã sử dụng
    import urllib.request, urllib.parse, urllib.error
    from bs4 import BeautifulSoup
    from socket import timeout
    import ssl
    import re
    import csv
    
    ctx = ssl.create_default_context()
    ctx.check_hostname = False
    ctx.verify_mode = ssl.CERT_NONE
    
    count = 0
    file = "Test.CSV"
    with open(file,'r', encoding='utf-8') as f, open('output_themes_1.csv', 'w', newline='', encoding='utf-8') as ofile:
        next(f)
        reader = csv.reader(f)
        writer = csv.writer(ofile)
        fir = 'S.No.', 'Article_Id', 'Validity', 'Content', 'Geography', 'URL'
        writer.writerow(fir)
        for line in reader:
            count = count+1
            text = line[5]
            lst = re.findall('(http.?://[^\s]+)', text)
            if not lst:
                x = count, line[0], 'Empty List', text, line[8], line[6]
                print (x)
                writer.writerow(x)
            else:
                try:
                    for url in lst:
                        try:
                            html = urllib.request.urlopen(url, context=ctx, timeout=60).read()
                            #html = urllib.request.urlopen(urllib.parse.quote(url, errors='ignore'), context=ctx).read()
                            soup = BeautifulSoup(html, 'html.parser')
                            title = soup.title.string
                            str_title = str (title)
                            if 'Twitter' in str_title:
                                if len(lst) > 1: break
                                else: continue
                            else:
                                y = count, line[0], 'Parsed', str_title, line[8], url
                                print (y)
                                writer.writerow(y)
                        except UnicodeEncodeError as e:
                            b_url = url.encode('ascii', errors='ignore')
                            n_url = b_url.decode("utf-8")
                            try:
                                html = urllib.request.urlopen(n_url, context=ctx, timeout=90).read()
                                soup = BeautifulSoup(html, 'html.parser')
                                title = soup.title.string
                                str_title = str (title)
                                if 'Twitter' in str_title:
                                    if len(lst) > 1: break
                                    else: continue
                                else:
                                    z = count, line[0], 'Parsed_2', str_title, line[8], url
                                    print (z)
                                    writer.writerow(z)
                            except Exception as e:
                                a = count, line[0], str(e), text, line[8], url
                                print (a)
                                writer.writerow(a)
                except Exception as e:
                    b = count, line[0], str(e), text, line[8], url
                    print (b)
                    writer.writerow(b)
    print ('Total Rows Analyzed:', count)
    
    1 để biểu thị rằng chúng tôi muốn thay thế bất cứ thứ gì ngoại trừ những điều sau), (2) những gì chúng tôi muốn thay thế các ký tự bằng và (3 ) Chuỗi chúng tôi muốn thay thế.

Trong phần tiếp theo, bạn sẽ học cách sử dụng hàm

import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup
from socket import timeout
import ssl
import re
import csv

ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

count = 0
file = "Test.CSV"
with open(file,'r', encoding='utf-8') as f, open('output_themes_1.csv', 'w', newline='', encoding='utf-8') as ofile:
    next(f)
    reader = csv.reader(f)
    writer = csv.writer(ofile)
    fir = 'S.No.', 'Article_Id', 'Validity', 'Content', 'Geography', 'URL'
    writer.writerow(fir)
    for line in reader:
        count = count+1
        text = line[5]
        lst = re.findall('(http.?://[^\s]+)', text)
        if not lst:
            x = count, line[0], 'Empty List', text, line[8], line[6]
            print (x)
            writer.writerow(x)
        else:
            try:
                for url in lst:
                    try:
                        html = urllib.request.urlopen(url, context=ctx, timeout=60).read()
                        #html = urllib.request.urlopen(urllib.parse.quote(url, errors='ignore'), context=ctx).read()
                        soup = BeautifulSoup(html, 'html.parser')
                        title = soup.title.string
                        str_title = str (title)
                        if 'Twitter' in str_title:
                            if len(lst) > 1: break
                            else: continue
                        else:
                            y = count, line[0], 'Parsed', str_title, line[8], url
                            print (y)
                            writer.writerow(y)
                    except UnicodeEncodeError as e:
                        b_url = url.encode('ascii', errors='ignore')
                        n_url = b_url.decode("utf-8")
                        try:
                            html = urllib.request.urlopen(n_url, context=ctx, timeout=90).read()
                            soup = BeautifulSoup(html, 'html.parser')
                            title = soup.title.string
                            str_title = str (title)
                            if 'Twitter' in str_title:
                                if len(lst) > 1: break
                                else: continue
                            else:
                                z = count, line[0], 'Parsed_2', str_title, line[8], url
                                print (z)
                                writer.writerow(z)
                        except Exception as e:
                            a = count, line[0], str(e), text, line[8], url
                            print (a)
                            writer.writerow(a)
            except Exception as e:
                b = count, line[0], str(e), text, line[8], url
                print (b)
                writer.writerow(b)
print ('Total Rows Analyzed:', count)
2 để xóa các ký tự đặc biệt khỏi chuỗi Python.

Kiểm tra một số hướng dẫn Python khác về DataGy, bao gồm hướng dẫn đầy đủ của chúng tôi về Gấu trúc kiểu dáng và tổng quan toàn diện của chúng tôi về các bảng xoay vòng trong gấu trúc!

Xóa các ký tự đặc biệt khỏi chuỗi bằng bộ lọc

Tương tự như sử dụng một vòng lặp For, chúng ta cũng có thể sử dụng hàm

import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup
from socket import timeout
import ssl
import re
import csv

ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

count = 0
file = "Test.CSV"
with open(file,'r', encoding='utf-8') as f, open('output_themes_1.csv', 'w', newline='', encoding='utf-8') as ofile:
    next(f)
    reader = csv.reader(f)
    writer = csv.writer(ofile)
    fir = 'S.No.', 'Article_Id', 'Validity', 'Content', 'Geography', 'URL'
    writer.writerow(fir)
    for line in reader:
        count = count+1
        text = line[5]
        lst = re.findall('(http.?://[^\s]+)', text)
        if not lst:
            x = count, line[0], 'Empty List', text, line[8], line[6]
            print (x)
            writer.writerow(x)
        else:
            try:
                for url in lst:
                    try:
                        html = urllib.request.urlopen(url, context=ctx, timeout=60).read()
                        #html = urllib.request.urlopen(urllib.parse.quote(url, errors='ignore'), context=ctx).read()
                        soup = BeautifulSoup(html, 'html.parser')
                        title = soup.title.string
                        str_title = str (title)
                        if 'Twitter' in str_title:
                            if len(lst) > 1: break
                            else: continue
                        else:
                            y = count, line[0], 'Parsed', str_title, line[8], url
                            print (y)
                            writer.writerow(y)
                    except UnicodeEncodeError as e:
                        b_url = url.encode('ascii', errors='ignore')
                        n_url = b_url.decode("utf-8")
                        try:
                            html = urllib.request.urlopen(n_url, context=ctx, timeout=90).read()
                            soup = BeautifulSoup(html, 'html.parser')
                            title = soup.title.string
                            str_title = str (title)
                            if 'Twitter' in str_title:
                                if len(lst) > 1: break
                                else: continue
                            else:
                                z = count, line[0], 'Parsed_2', str_title, line[8], url
                                print (z)
                                writer.writerow(z)
                        except Exception as e:
                            a = count, line[0], str(e), text, line[8], url
                            print (a)
                            writer.writerow(a)
            except Exception as e:
                b = count, line[0], str(e), text, line[8], url
                print (b)
                writer.writerow(b)
print ('Total Rows Analyzed:', count)
2 để sử dụng Python để xóa các ký tự đặc biệt khỏi chuỗi.

Hàm

import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup
from socket import timeout
import ssl
import re
import csv

ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

count = 0
file = "Test.CSV"
with open(file,'r', encoding='utf-8') as f, open('output_themes_1.csv', 'w', newline='', encoding='utf-8') as ofile:
    next(f)
    reader = csv.reader(f)
    writer = csv.writer(ofile)
    fir = 'S.No.', 'Article_Id', 'Validity', 'Content', 'Geography', 'URL'
    writer.writerow(fir)
    for line in reader:
        count = count+1
        text = line[5]
        lst = re.findall('(http.?://[^\s]+)', text)
        if not lst:
            x = count, line[0], 'Empty List', text, line[8], line[6]
            print (x)
            writer.writerow(x)
        else:
            try:
                for url in lst:
                    try:
                        html = urllib.request.urlopen(url, context=ctx, timeout=60).read()
                        #html = urllib.request.urlopen(urllib.parse.quote(url, errors='ignore'), context=ctx).read()
                        soup = BeautifulSoup(html, 'html.parser')
                        title = soup.title.string
                        str_title = str (title)
                        if 'Twitter' in str_title:
                            if len(lst) > 1: break
                            else: continue
                        else:
                            y = count, line[0], 'Parsed', str_title, line[8], url
                            print (y)
                            writer.writerow(y)
                    except UnicodeEncodeError as e:
                        b_url = url.encode('ascii', errors='ignore')
                        n_url = b_url.decode("utf-8")
                        try:
                            html = urllib.request.urlopen(n_url, context=ctx, timeout=90).read()
                            soup = BeautifulSoup(html, 'html.parser')
                            title = soup.title.string
                            str_title = str (title)
                            if 'Twitter' in str_title:
                                if len(lst) > 1: break
                                else: continue
                            else:
                                z = count, line[0], 'Parsed_2', str_title, line[8], url
                                print (z)
                                writer.writerow(z)
                        except Exception as e:
                            a = count, line[0], str(e), text, line[8], url
                            print (a)
                            writer.writerow(a)
            except Exception as e:
                b = count, line[0], str(e), text, line[8], url
                print (b)
                writer.writerow(b)
print ('Total Rows Analyzed:', count)
2 chấp nhận hai tham số:

  1. Một chức năng để đánh giá,
  2. Một điều không thể lọc được để lọc

Vì các chuỗi có thể sử dụng được, chúng ta có thể vượt qua trong một chức năng loại bỏ các ký tự đặc biệt. Tương tự như phương thức Loop For, chúng ta có thể sử dụng phương thức .isalnum() để kiểm tra xem nó có phải là chữ và số hay không.

Hãy để thử điều này trong Python:

# Remove Special Characters from a String Using re.sub()
import re

text = 'datagy -- is. great!'
new_text = ''.join(filter(str.isalnum, text))

print(new_text)

# Returns: datagyisgreat

Hãy cùng khám phá cách thức và lý do tại sao điều này hoạt động:

  1. Chúng tôi sử dụng chức năng bộ lọc để trả về một đối tượng bộ lọc bao gồm trên các ký tự chữ và số
  2. Sau đó, chúng tôi sử dụng phương thức
    import urllib.request, urllib.parse, urllib.error
    from bs4 import BeautifulSoup
    from socket import timeout
    import ssl
    import re
    import csv
    
    ctx = ssl.create_default_context()
    ctx.check_hostname = False
    ctx.verify_mode = ssl.CERT_NONE
    
    count = 0
    file = "Test.CSV"
    with open(file,'r', encoding='utf-8') as f, open('output_themes_1.csv', 'w', newline='', encoding='utf-8') as ofile:
        next(f)
        reader = csv.reader(f)
        writer = csv.writer(ofile)
        fir = 'S.No.', 'Article_Id', 'Validity', 'Content', 'Geography', 'URL'
        writer.writerow(fir)
        for line in reader:
            count = count+1
            text = line[5]
            lst = re.findall('(http.?://[^\s]+)', text)
            if not lst:
                x = count, line[0], 'Empty List', text, line[8], line[6]
                print (x)
                writer.writerow(x)
            else:
                try:
                    for url in lst:
                        try:
                            html = urllib.request.urlopen(url, context=ctx, timeout=60).read()
                            #html = urllib.request.urlopen(urllib.parse.quote(url, errors='ignore'), context=ctx).read()
                            soup = BeautifulSoup(html, 'html.parser')
                            title = soup.title.string
                            str_title = str (title)
                            if 'Twitter' in str_title:
                                if len(lst) > 1: break
                                else: continue
                            else:
                                y = count, line[0], 'Parsed', str_title, line[8], url
                                print (y)
                                writer.writerow(y)
                        except UnicodeEncodeError as e:
                            b_url = url.encode('ascii', errors='ignore')
                            n_url = b_url.decode("utf-8")
                            try:
                                html = urllib.request.urlopen(n_url, context=ctx, timeout=90).read()
                                soup = BeautifulSoup(html, 'html.parser')
                                title = soup.title.string
                                str_title = str (title)
                                if 'Twitter' in str_title:
                                    if len(lst) > 1: break
                                    else: continue
                                else:
                                    z = count, line[0], 'Parsed_2', str_title, line[8], url
                                    print (z)
                                    writer.writerow(z)
                            except Exception as e:
                                a = count, line[0], str(e), text, line[8], url
                                print (a)
                                writer.writerow(a)
                except Exception as e:
                    b = count, line[0], str(e), text, line[8], url
                    print (b)
                    writer.writerow(b)
    print ('Total Rows Analyzed:', count)
    
    6 để tham gia các ký tự của chúng tôi với các ký tự trống.

Nếu bạn muốn bao gồm các ký tự khác, chẳng hạn như chuỗi, chúng ta có thể xác định một chức năng tùy chỉnh mà chúng ta có thể đánh giá chống lại.

Hãy để xem cách thức hoạt động của nó trong Python:

# Remove Special Characters from a String Using filter()
import re

def remove_special_characters(character):
    if character.isalnum() or character == ' ':
        return True
    else:
        return False

text = 'datagy -- is. great!'
new_text = ''.join(filter(remove_special_characters, text))

print(new_text)

# Returns: datagy  is great

Hãy để phá vỡ lý do tại sao phương pháp này hoạt động:

  1. Chúng tôi xác định một hàm tùy chỉnh kiểm tra xem một ký tự có phải là chữ và số hay không hoặc nếu ký tự bằng một không gian, được xác định bởi ký tự
    import urllib.request, urllib.parse, urllib.error
    from bs4 import BeautifulSoup
    from socket import timeout
    import ssl
    import re
    import csv
    
    ctx = ssl.create_default_context()
    ctx.check_hostname = False
    ctx.verify_mode = ssl.CERT_NONE
    
    count = 0
    file = "Test.CSV"
    with open(file,'r', encoding='utf-8') as f, open('output_themes_1.csv', 'w', newline='', encoding='utf-8') as ofile:
        next(f)
        reader = csv.reader(f)
        writer = csv.writer(ofile)
        fir = 'S.No.', 'Article_Id', 'Validity', 'Content', 'Geography', 'URL'
        writer.writerow(fir)
        for line in reader:
            count = count+1
            text = line[5]
            lst = re.findall('(http.?://[^\s]+)', text)
            if not lst:
                x = count, line[0], 'Empty List', text, line[8], line[6]
                print (x)
                writer.writerow(x)
            else:
                try:
                    for url in lst:
                        try:
                            html = urllib.request.urlopen(url, context=ctx, timeout=60).read()
                            #html = urllib.request.urlopen(urllib.parse.quote(url, errors='ignore'), context=ctx).read()
                            soup = BeautifulSoup(html, 'html.parser')
                            title = soup.title.string
                            str_title = str (title)
                            if 'Twitter' in str_title:
                                if len(lst) > 1: break
                                else: continue
                            else:
                                y = count, line[0], 'Parsed', str_title, line[8], url
                                print (y)
                                writer.writerow(y)
                        except UnicodeEncodeError as e:
                            b_url = url.encode('ascii', errors='ignore')
                            n_url = b_url.decode("utf-8")
                            try:
                                html = urllib.request.urlopen(n_url, context=ctx, timeout=90).read()
                                soup = BeautifulSoup(html, 'html.parser')
                                title = soup.title.string
                                str_title = str (title)
                                if 'Twitter' in str_title:
                                    if len(lst) > 1: break
                                    else: continue
                                else:
                                    z = count, line[0], 'Parsed_2', str_title, line[8], url
                                    print (z)
                                    writer.writerow(z)
                            except Exception as e:
                                a = count, line[0], str(e), text, line[8], url
                                print (a)
                                writer.writerow(a)
                except Exception as e:
                    b = count, line[0], str(e), text, line[8], url
                    print (b)
                    writer.writerow(b)
    print ('Total Rows Analyzed:', count)
    
    7
  2. Nếu là, thì True được trả lại. Mặt khác, biểu thức đánh giá thành
    ['https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u']
    
    0

Do đánh giá này về độ phân giải, chúng tôi lọc ra bất kỳ giá trị nào không đánh giá thành True.

Bạn muốn tìm hiểu thêm về Python F-String? Kiểm tra hướng dẫn chuyên sâu của tôi, bao gồm một video từng bước cho Master Python F-Strings!Check out my in-depth tutorial, which includes a step-by-step video to master Python f-strings!

Sự kết luận

Trong bài đăng này, bạn đã học cách xóa các ký tự đặc biệt khỏi chuỗi Python. Bạn đã học cách thực hiện điều này với phương thức

# Remove Special Characters from a String Using .isalnum()

text = 'datagy -- is. great!'
new_text = ''

for character in text:
    if character.isalnum():
        new_text += character

print(new_text)

# Returns: datagyisgreat
1, thư viện biểu thức chính quy
['https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u']
2 và hàm
import urllib.request, urllib.parse, urllib.error
from bs4 import BeautifulSoup
from socket import timeout
import ssl
import re
import csv

ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE

count = 0
file = "Test.CSV"
with open(file,'r', encoding='utf-8') as f, open('output_themes_1.csv', 'w', newline='', encoding='utf-8') as ofile:
    next(f)
    reader = csv.reader(f)
    writer = csv.writer(ofile)
    fir = 'S.No.', 'Article_Id', 'Validity', 'Content', 'Geography', 'URL'
    writer.writerow(fir)
    for line in reader:
        count = count+1
        text = line[5]
        lst = re.findall('(http.?://[^\s]+)', text)
        if not lst:
            x = count, line[0], 'Empty List', text, line[8], line[6]
            print (x)
            writer.writerow(x)
        else:
            try:
                for url in lst:
                    try:
                        html = urllib.request.urlopen(url, context=ctx, timeout=60).read()
                        #html = urllib.request.urlopen(urllib.parse.quote(url, errors='ignore'), context=ctx).read()
                        soup = BeautifulSoup(html, 'html.parser')
                        title = soup.title.string
                        str_title = str (title)
                        if 'Twitter' in str_title:
                            if len(lst) > 1: break
                            else: continue
                        else:
                            y = count, line[0], 'Parsed', str_title, line[8], url
                            print (y)
                            writer.writerow(y)
                    except UnicodeEncodeError as e:
                        b_url = url.encode('ascii', errors='ignore')
                        n_url = b_url.decode("utf-8")
                        try:
                            html = urllib.request.urlopen(n_url, context=ctx, timeout=90).read()
                            soup = BeautifulSoup(html, 'html.parser')
                            title = soup.title.string
                            str_title = str (title)
                            if 'Twitter' in str_title:
                                if len(lst) > 1: break
                                else: continue
                            else:
                                z = count, line[0], 'Parsed_2', str_title, line[8], url
                                print (z)
                                writer.writerow(z)
                        except Exception as e:
                            a = count, line[0], str(e), text, line[8], url
                            print (a)
                            writer.writerow(a)
            except Exception as e:
                b = count, line[0], str(e), text, line[8], url
                print (b)
                writer.writerow(b)
print ('Total Rows Analyzed:', count)
2. Học cách làm điều này là một kỹ năng quan trọng khi làm việc với dữ liệu văn bản ngày càng quan trọng hơn.

Để tìm hiểu thêm về Thư viện Biểu thức thông thường Python

['https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u', 'https://twitter.com/GVNyqWEu5u']
2, hãy xem tài liệu chính thức ở đây.

Làm thế nào để bạn loại bỏ các ký tự đặc biệt khỏi Python?

Phương thức thay thế () được sử dụng để thay thế các ký tự đặc biệt bằng các ký tự trống hoặc giá trị null. Các biểu thức chính quy được sử dụng để phù hợp với các mẫu ký tự đặc biệt và xóa các ký tự đặc biệt trong Python.. Regular expressions are used to match patterns of special characters and remove special characters in python.

Làm cách nào để xóa văn bản khỏi URL trong Python?

Hủy bỏ URL khỏi văn bản trong Python..
Sử dụng hàm re.sub () để xóa các URL khỏi văn bản trong Python ..
Sử dụng hàm re.findall () để xóa URL khỏi văn bản trong Python ..
Sử dụng hàm Re.Search () để xóa URL khỏi văn bản trong Python ..
Sử dụng lớp urllib.urlparse để xóa các URL khỏi văn bản trong Python ..

Làm thế nào để bạn làm sạch URL trong Python?

Bạn cần xác định sạch ...
Sắp xếp các đối số truy vấn, đầu tiên theo khóa, sau đó theo giá trị ..
Phần trăm mã hóa đường dẫn và đối số truy vấn.....
Bình thường hóa tất cả các không gian (trong các đối số truy vấn) '+' (biểu tượng cộng).
Bình thường hóa trường hợp mã hóa phần trăm ( %2F -> %2F).

Làm cách nào để loại bỏ nhiều ký tự đặc biệt khỏi chuỗi trong Python?

Xóa ký hiệu khỏi chuỗi bằng cách sử dụng thay thế () người ta có thể sử dụng str.replace () bên trong một vòng lặp để kiểm tra BAD_CHAR và sau đó thay thế nó bằng chuỗi trống do đó loại bỏ nó.use str. replace() inside a loop to check for a bad_char and then replace it with the empty string hence removing it.