Con trăn urllib2

Bạn có thể tải xuống tệp (Tệp ảnh, Tệp văn bản, …) từ 1 đường dẫn trên trang web sử dụng thư viện urllib của Python 3

Đoạn mã nguồn Python 3 như sau

import urllib
import os

output_dir = '/tmp'
image_url = 'https://vinasupport.com/assets/img/vinasupport_logo.png'

# Make output directory if not exist
if not os.path.exists(output_dir):
    os.makedirs(output_dir)

# save path
image_save_path = output_dir + '/' + os.path.basename(image_url)

# Download file from url
urllib.request.urlretrieve(image, image_save_path)
print(image_save_path)

Trong ví dụ trên, mình thực hiện tải xuống tệp ảnh có đường dẫn là. https. //vinasupport. com/assets/img/vinasupport_logo. png

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 cài đặt 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 thứ mà bạn biết là đủ cho dữ liệu bạn mong đợi nhưng sẽ ngăn chặn bản kịch 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
  • Cách đọc tệp văn bản từ URL trong Python
  • url = "http. //tệp văn bản. com/adventure/Aencerse. txt"
  • Tệp = urllib. request request. Urlopen (URL)
  • Đối chiếu với dòng trong tập tin
  • Phương pháp 3. Use urllib3. quản lý hồ bơi ()
  •   . This code nối một dòng trống (______32) vào đầu ra
  • Sau đó, biến
    $ pip install requests
    9 tạo ra một đối tượng
    import urllib.request
    import requests
    import urllib
    from urllib.request import urlopen
    import urllib3
    0 tương tự như bên dưới
  •   . This code nối một dòng trống (______32) vào đầu ra

Cách đọc tệp văn bản từ URL trong Python

url = "http. //tệp văn bản. com/adventure/Aencerse. txt"

Tệp = urllib. request request. Urlopen (URL)

Đối chiếu với dòng trong tập tin

Ở trường đại học, tôi tìm thấy tình yêu viết và mã hóa của mình. Cả hai trong số đó tôi đã có thể sử dụng trong sự nghiệp của mình

Trong 15 năm qua, tôi đã giữ một số vị trí như

Nhà văn kỹ thuật của công ty nội bộ cho các chương trình phần mềm khác nhau như Navision và Microsoft CRM Corporate Huấn luyện viên (nhân viên từ 30 tuổi trở lên)
Người huấn luyện doanh nghiệp (
Programming Instructor
Implementation Specialist for Navision and Microsoft CRM
Senior PHP Coder

Làm cách nào để đọc tệp văn bản từ URL trong Python?

Cách đọc tệp văn bản từ URL trong Python. .

url = "http. //tệp văn bản. com/adventure/Aencerse. txt"

Tệp = urllib. request request. Urlopen (URL)

Đối chiếu với dòng trong tập tin

Decoded_line = dòng. Giải mã ("UTF-8")

in (decoded_line)

Làm thế nào để đọc dữ liệu trực tiếp từ URL trong Python?

Ý tưởng cơ bản. .

yêu cầu = urllib. request request. Request (URL). Tạo đối tượng yêu cầu Chỉ định URL chúng tôi muốn

resp = urllib. request request. URLMỞ (NGƯỜI). Trả về một đối tượng phản hồi từ máy chủ cho URL được yêu cầu

Data = resp. Đọc (). Đối tượng phản hồi (RESP) giống như tệp, có nghĩa là chúng ta có thể đọc nó

Mô-đun urllib trong Python 3 cho phép bạn truy cập các trang web thông qua chương trình của mình. Điều này mở ra nhiều cánh cửa cho các chương trình của bạn như internet mở ra cho bạn. urllib trong Python 3 hơi khác so với urllib2 trong Python 2, nhưng chúng hầu như giống nhau. Thông qua urllib, bạn có thể truy cập các trang web, tải xuống dữ liệu, phân tích cú pháp dữ liệu, sửa đổi tiêu đề của mình và thực hiện bất kỳ yêu cầu GET và POST nào mà bạn có thể cần thực hiện

Một số trang web không đánh giá cao các chương trình truy cập dữ liệu của họ và đặt trọng lượng lên máy chủ của họ. Khi họ phát hiện ra rằng một chương trình đang truy cập vào họ, đôi khi họ có thể chọn chặn bạn hoặc cung cấp cho bạn dữ liệu khác mà người dùng thông thường có thể thấy. Điều này có thể gây khó chịu lúc đầu, nhưng có thể khắc phục bằng một số mã đơn giản. Để làm điều này, bạn chỉ cần sửa đổi tác nhân người dùng, là một biến trong tiêu đề mà bạn gửi vào. Tiêu đề là các bit dữ liệu mà bạn chia sẻ với máy chủ để cho họ biết một chút về bạn. Theo mặc định, đây là nơi Python thông báo cho trang web mà bạn đang truy cập bằng urllib của Python và phiên bản Python của bạn. Tuy nhiên, chúng tôi có thể sửa đổi điều này và hành động như thể chúng tôi là người dùng Internet Explorer cấp thấp, người dùng Chrome hoặc bất kỳ thứ gì khác thực sự

Tuy nhiên, tôi không khuyên bạn nên làm điều này một cách mù quáng, nếu một trang web chặn bạn truy cập. Các trang web cũng sẽ sử dụng các chiến thuật khác, nhưng thông thường họ đang làm điều đó vì họ cũng cung cấp một API được tạo riêng để nhiều chương trình truy cập hơn. Các chương trình thường chỉ quan tâm đến dữ liệu và không cần phải cung cấp dữ liệu HTML hoặc CSS ưa thích, cũng như dữ liệu cho quảng cáo, v.v.

Đây là mã mẫu đi kèm với video

Đây là ví dụ đầu tiên và dễ nhất về việc sử dụng urllib. Chúng ta chỉ cần nhập urllib. yêu cầu. Từ đó, chúng tôi chỉ định việc mở url cho một biến, nơi cuối cùng chúng tôi có thể sử dụng một. read() lệnh đọc dữ liệu. Kết quả là một mớ hỗn độn, nhưng chúng tôi thực sự đã đọc mã nguồn

#Used to make requests
import urllib.request

x = urllib.request.urlopen('https://www.google.com/')
print(x.read())

Chẳng bao lâu nữa, chúng tôi sẽ sử dụng các biểu thức chính quy để xóa kết quả. Vấn đề là các trang web sử dụng tất cả các loại HTML, CSS và javascript để làm cho trang web bắt mắt. Các chương trình của chúng tôi thực sự không quan tâm trang web trông như thế nào. Chúng tôi chỉ muốn văn bản thông thường, vì vậy chúng tôi cần loại bỏ tất cả những thứ lộn xộn. Để làm điều đó, các biểu thức chính quy trở nên khá hữu ích, vì vậy chúng ta sẽ sớm đến đó, sau khi đề cập đến regex

Tiếp theo, đôi khi, chúng tôi muốn đưa vào các giá trị hoặc GET/POST, từ/đến một URL. Có hai phương pháp truyền dữ liệu bằng url và chúng là GET và POST. Phương thức tự nhiên là yêu cầu GET, có nghĩa là bạn đưa ra yêu cầu và bạn nhận được dữ liệu. Cái còn lại là POST, nơi bạn gửi dữ liệu vào máy chủ, giống như bạn đăng một số dữ liệu và bạn nhận được yêu cầu dựa trên bài đăng

Một ví dụ

http. //lập trình trăn. net/?s=basics&submit=Tìm kiếm

Bạn thấy có 2 biến ở đây. Bạn có thể nhìn thấy chúng vì dấu bằng. Biến đầu tiên được biểu thị bằng dấu chấm hỏi và tất cả các biến tiếp theo được biểu thị bằng dấu &

Có nhiều cách để chuyển các giá trị như thế này, bạn chỉ cần mã hóa chúng hoặc bạn có thể sử dụng urllib để làm điều đó. Hãy hiển thị một ví dụ về các yêu cầu với urllib

________số 8

Ở trên, chúng tôi đang xác định các biến mà chúng tôi dự định POST tới url mà chúng tôi chỉ định

Từ đó, bên dưới, trước tiên chúng tôi cần mã hóa url tất cả các giá trị. Về cơ bản, đây là những thứ như chuyển đổi "dấu cách" thành% 20 chẳng hạn

Sau đó, chúng tôi mã hóa thành byte utf-8. Chúng tôi đưa ra yêu cầu của mình, thêm vào một giá trị nữa, dữ liệu, là từ điển mã hóa của các khóa và giá trị hoặc được hiểu rõ hơn trong trường hợp này là các biến và giá trị của chúng. Sau đó, chúng tôi mở url với yêu cầu mà chúng tôi đã tạo, cái mà chúng tôi gọi là phản hồi, vì đó là những gì chúng tôi nhận được với nó. Cuối cùng, chúng tôi đọc phản hồi đó với một. đọc()

data = urllib.parse.urlencode(values)
data = data.encode('utf-8') # data should be bytes
req = urllib.request.Request(url, data)
resp = urllib.request.urlopen(req)
respData = resp.read()

print(respData)

Hóa ra, Google sẽ trả về 405, phương thức không được phép. Google không hài lòng với yêu cầu của chúng tôi. Hãy thử cách trên trên một trang web khác, sửa đổi các biến. Tìm một trang web có thanh tìm kiếm và xem liệu bạn có thể sử dụng nó thông qua Python không

Cuối cùng, sửa đổi tiêu đề. Đôi khi, các trang web không đánh giá cao việc bị rô bốt truy cập hoặc chúng có thể đối xử khác với chúng. Trước đây, hầu hết các trang web nếu có lập trường gì thì cũng chỉ chặn các chương trình. Giờ đây, phương pháp phổ biến dường như là cung cấp các dữ liệu khác nhau cho các chương trình, để chúng không dễ dàng nhận ra điều gì đã xảy ra hoặc có thể chia sẻ thông tin với các nhà phát triển. Đôi khi, họ cũng chỉ đơn giản là phục vụ chương trình với dữ liệu hạn chế, để giữ cho tải trên máy chủ của họ ở mức thấp. Wikipedia đã từng chặn hoàn toàn các chương trình, nhưng giờ đây chúng phục vụ một trang, Google cũng vậy. Đây thường là một trang không phải là trang bạn thực sự muốn, vì vậy bạn sẽ cần phải giải quyết nó

Bất cứ khi nào bạn truy cập một liên kết, bạn sẽ gửi một tiêu đề, đây chỉ là một số thông tin cơ bản về bạn. Đây là cách Google Analytics biết bạn đang sử dụng trình duyệt nào, chẳng hạn

Trong tiêu đề, có một giá trị được gọi là tác nhân người dùng, xác định trình duyệt đang truy cập máy chủ của trang web

Nếu bạn đang sử dụng tác nhân người dùng python mặc định với urllib, thì bạn đang thông báo mình là Python-urllib/3. 4, nếu phiên bản Python của bạn là 3. 4. Điều này hoặc là xa lạ với trang web, hoặc họ sẽ chặn nó hoàn toàn. Một giải pháp cho vấn đề này là chỉ xác định bản thân bạn là một thứ gì đó hoàn toàn khác.

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
0

Đầu ra ở trên là của Google, ai biết bạn là Python. Trong những năm qua, cách Google và các trang web khác xử lý các chương trình đã thay đổi, vì vậy điều này cũng có thể thay đổi theo thời gian. Phản hồi hiện tại họ đang đưa ra chỉ là một trang tìm kiếm mặc định, sau khi bạn phân tích cú pháp qua tất cả mớ mã được trả về

Google đang làm điều này bởi vì chúng tôi đang cho Google biết chúng tôi là ai, một bot Python urllib. Hãy thay đổi điều đó bằng cách sửa đổi tác nhân người dùng của chúng tôi trong tiêu đề

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
1

Ở trên, về cơ bản, chúng tôi làm điều tương tự, chỉ lần này, chúng tôi tạo yêu cầu của mình trước, chuyển qua URL và các tiêu đề mới được sửa đổi. Sau đó, chúng tôi đưa ra yêu cầu và phản hồi của chúng tôi thực sự khác. Chúng tôi thực sự lấy lại dữ liệu mà chúng tôi quan tâm