Hướng dẫn python web scraping javascript - python web cạo javascript

Trang web được hiển thị với JavaScript bằng AJAX. Bạn có thể truy cập dữ liệu bằng API giống như yêu cầu AJAX. Bạn nhận được phản hồi JSON mà bạn có thể phân tích để lấy dữ liệu bạn muốn. Bạn có thể chỉnh sửa URL để chỉ trả lại loại tiền bạn muốn, ví dụ:

Nội dung chính ShowShow

  • Bảng JavaScript là gì?
  • Bảng HTML so với các bảng JavaScript trong Scraping Web Scraping
  • Cạo các bảng động trong Python với các yêu cầu
  • 1. Tìm API ẩn để truy cập dữ liệu JSON
  • 2. Gửi yêu cầu HTTP ban đầu của chúng tôi
  • 3. Đọc và cạo dữ liệu JSON
  • 4. Xuất dữ liệu của chúng tôi vào tệp CSV
  • 5. Chạy tập lệnh của chúng tôi [Mã đầy đủ]
  • Gói lên: mở rộng cạp của bạn với Scraperapi
  • Làm thế nào để bạn cạo nội dung động trong Python?
  • Bạn có thể cạo một trang web năng động?
  • Python có tốt cho việc quét dữ liệu không?
  • Selenium có tốt cho việc cạo không?

url = "https://widget.sentryd.com/widget/api/instruments/latest/EUR_USD?ts=1533035674098"

Đây là mã để trả về tất cả các loại tiền tệ.

import requests
url = "https://widget.sentryd.com/widget/api/instruments/latest/EUR_USD,GBP_USD,USD_JPY,USD_CAD,USD_CHF,AUD_USD,NZD_USD,EUR_GBP,EUR_JPY,EUR_CAD,EUR_CHF,EUR_AUD,GBP_JPY,GBP_CAD,GBP_CHF,GBP_AUD,USD_CNH,XAU_USD?ts=1533035674098"
r = requests.get(url)
j =r.json()
for i in j:
    print (j[i]['instrument'], j[i]['timestamp'],j[i]['bidPrice'],j[i]['offerPrice'],j[i]['currency'])

Cập nhật để đáp lại bình luận.

Bạn có thể nhận được phần còn lại của dữ liệu thô như thế này.

import requests
import time

s = requests.Session()
s.headers.update({'Content-Type': 'application/x-www-form-urlencoded',
                  'Accept': 'application/json',
                  'authorization': 'Basic Y3VycmVuY3lfd2lkZ2V0OmN1cnJlbmN5X3dpZGdldA=='
                  })

url = "https://widget.sentryd.com/widget/sentry/api/Pricing"
data = {'Type': 'Pricing',
        'Products': 'EUR/GBP',
        'POSTAccessCode': 'sentryPricingApi',
        'POSTAccessPassword': 'sentrypricingapi_213',
        'timestamp': str(round(time.time() * 1000))}

r = s.post(url, data=data)
print(r.json())

data['Type']= 'Volatilities'
r = s.post(url, data=data)
print(r.json())

Tệp https://widget.sentryd.com/widget/currency-widget.min.js xử lý dữ liệu này Bạn có thể đọc rằng các ví dụ về cách giải thích dữ liệu.

Nếu bạn không muốn dữ liệu thô thì hãy cạo nó bằng một công nghệ hiển thị trang web được tạo JavaScript, hãy xem câu trả lời của tôi để cạo Google Finance (BeautifulSoup)

Trong hướng dẫn trước đây, chúng tôi đã loại bỏ các bảng từ HTML đơn giản, tuy nhiên có nhiều ứng dụng web hiện đại tạo ra các bảng một cách linh hoạt và kỹ thuật được sử dụng trong hướng dẫn trước đây không thể được sử dụng để cạo các bảng từ các ứng dụng web đó. Trong hướng dẫn này, chúng ta sẽ xem cách chúng ta có thể sử dụng selenium để cạo các bảng từ các ứng dụng đó.

Sau đây là các bước cần thiết để cạo các bảng được tạo động trên Python3 bằng selen và gấu trúc. Trong hướng dẫn này, chúng tôi sẽ cạo tất cả các bảng đang được tạo động tại http://www.scstrade.com/stockscreening/ss_companysnapshotyr.aspx?symbol=fatima

  1. Nhập Web WebDriver từ mô -đun Selenium.
from selenium import webdriver

2. Xác định URL từ nơi bạn muốn cạo dữ liệu.

URL='http://www.scstrade.com/stockscreening/SS_CompanySnapShotYR.aspx?symbol=FATIMA'

3. Xác định webDriver được nhập vào mẫu selenium, chúng tôi sẽ sử dụng Firefox WebDriver.

driver = webdriver.Firefox()

4. Tải URL bằng trình điều khiển.

driver.get(URL)

5 Ở đây chúng tôi đang sử dụng XPath để định vị các phần tử trong HTML. Mẫu // Mẫu [1] được sử dụng trong ví dụ này có nghĩa là chúng tôi muốn có được thuộc tính biểu mẫu đầu tiên trong HTML.

element = driver.find_element_by_xpath(‘//form[1]’)

6. Tiếp theo, chúng ta có được HTML bên trong thuộc tính bằng cách sử dụng hàm get get_attribution.

element_html=element.get_attribute(‘innerHTML’)

7. Khi chúng tôi có HTML cho phần tử chứa bảng chúng tôi muốn cạo, chúng tôi có thể sử dụng cùng một kỹ thuật được sử dụng trong hướng dẫn trước để truy cập bảng. Nhập mô -đun Pandas Pandas.

import pandas

8. Đọc tất cả các bảng trong HTML vào danh sách các khung dữ liệu. Chức năng của Pandas.read_html (), đọc HTML và đặt tất cả các bảng được tìm thấy trong HTML vào một danh sách các khung dữ liệu. Để biết chi tiết về pandas.read_html (). Vui lòng theo liên kết này.

import requests
url = "https://widget.sentryd.com/widget/api/instruments/latest/EUR_USD,GBP_USD,USD_JPY,USD_CAD,USD_CHF,AUD_USD,NZD_USD,EUR_GBP,EUR_JPY,EUR_CAD,EUR_CHF,EUR_AUD,GBP_JPY,GBP_CAD,GBP_CHF,GBP_AUD,USD_CNH,XAU_USD?ts=1533035674098"
r = requests.get(url)
j =r.json()
for i in j:
    print (j[i]['instrument'], j[i]['timestamp'],j[i]['bidPrice'],j[i]['offerPrice'],j[i]['currency'])
0

9. Lặp lại qua danh sách các khung dữ liệu để truy cập mỗi bảng

import requests
url = "https://widget.sentryd.com/widget/api/instruments/latest/EUR_USD,GBP_USD,USD_JPY,USD_CAD,USD_CHF,AUD_USD,NZD_USD,EUR_GBP,EUR_JPY,EUR_CAD,EUR_CHF,EUR_AUD,GBP_JPY,GBP_CAD,GBP_CHF,GBP_AUD,USD_CNH,XAU_USD?ts=1533035674098"
r = requests.get(url)
j =r.json()
for i in j:
    print (j[i]['instrument'], j[i]['timestamp'],j[i]['bidPrice'],j[i]['offerPrice'],j[i]['currency'])
1

Đối với mã đầy đủ theo liên kết này.

Bảng web là một số nguồn dữ liệu lớn nhất trên web. Chúng đã có một định dạng dễ đọc và hiểu và được sử dụng để hiển thị một lượng lớn thông tin hữu ích như dữ liệu nhân viên, số liệu thống kê, mô hình nghiên cứu ban đầu, v.v.

Điều đó nói rằng, không phải tất cả các bảng đều được làm giống nhau và một số có thể thực sự khó khăn để cạo bằng các kỹ thuật thông thường.

Trong hướng dẫn này, chúng tôi sẽ hiểu sự khác biệt giữa các bảng HTML và JavaScript, tại sao cái sau khó cạo hơn và chúng tôi sẽ tạo ra một kịch bản để phá vỡ các thách thức của các bảng kết xuất mà không sử dụng bất kỳ công nghệ phức tạp nào.

Bảng JavaScript là gì?

Các bảng JavaScript, còn được gọi là các bảng động hoặc bảng AJAX, là một tập hợp các hàng và cột được sử dụng để hiển thị dữ liệu động ở định dạng lưới trực tiếp trên trang web.

Không giống như các bảng HTML, dữ liệu trong bảng JS được đưa vào trang sau giai đoạn kết xuất, cho phép tự động phát triển như nhiều hàng và cột cần thiết để chứa dữ liệu, tự động dân cư với nội dung theo yêu cầu và sử dụng bất kỳ JavaScript nào chức năng trên dữ liệu để sắp xếp, xếp hạng hoặc thay đổi bảng.

Bảng HTML so với các bảng JavaScript trong Scraping Web Scraping

Trên mặt trước, các bảng HTML và các bảng JavaScript trông giống nhau, cả hai đều hiển thị dữ liệu ở định dạng lưới. Tuy nhiên, các bảng HTML, như tên của chúng cho thấy, là các bảng được xây dựng trực tiếp trên tệp HTML, trong khi các bảng web động được trình duyệt hiển thị - trong hầu hết các trường hợp - bằng cách tìm nạp tệp JSON chứa thông tin và các chỉ thị sau được viết trên JavaScript để tiêm dữ liệu vào HTML.

Nhưng nó có ý nghĩa gì với chúng ta? Các bảng HTML có thể được truy cập chỉ bằng cách yêu cầu tệp HTML của trang web và sau đó phân tích thông tin chúng tôi muốn sử dụng các lớp CSS và ID.

Trong trường hợp của các bảng JavaScript, cách tiếp cận này là vô ích vì dữ liệu chúng ta cần không có trong tệp HTML. Nhiều nhất, chúng tôi sẽ kết thúc việc cạo rất nhiều các yếu tố HTML trống.

Thay vào đó, tùy chọn đầu tiên của chúng tôi là sử dụng trình duyệt không đầu, như Selenium, để truy cập và hiển thị trang web. Khi dữ liệu được đưa vào trình duyệt, giờ đây chúng ta có thể truy cập nó bằng các bộ chọn XPath và CSS.

Mặc dù Selenium là một công cụ tuyệt vời để tự động hóa bất kỳ loại nhiệm vụ trình duyệt nào - ngay cả việc cạo web - có một tùy chọn đơn giản hơn mà không yêu cầu một giải pháp quá mức cần thiết như vậy:

Cạo các bảng động trong Python với các yêu cầu

Vâng, chúng tôi chỉ nói rằng chúng tôi có thể truy cập vào một bảng JavaScript bằng cách chỉ yêu cầu tệp HTML, nhưng đó không phải là những gì chúng tôi sẽ làm.

Nếu bạn đã đọc kỹ, bạn sẽ biết rằng các bảng động cần lấy dữ liệu từ một nơi nào đó, vì vậy nếu chúng ta có thể bắt chước yêu cầu mà trình duyệt gửi khi hiển thị trang, chúng ta có thể truy cập cùng một dữ liệu mà không cần đầu trình duyệt.

Đối với hướng dẫn này, chúng tôi sẽ quét https://datatables.net/examples/data_source/ajax.html bằng thư viện yêu cầu Python để trích xuất tất cả dữ liệu nhân viên được hiển thị trên trang web.

Hướng dẫn python web scraping javascript - python web cạo javascript

Lưu ý: Nếu đây là lần đầu tiên bạn thực hiện cào web với Python, chúng tôi khuyên bạn nên xem xét việc quét web của chúng tôi trong Python cho hướng dẫn của người mới bắt đầu. Bạn sẽ học được tất cả những điều cơ bản mà bạn sẽ cần phải loại bỏ hầu hết mọi dữ liệu HTML bạn có thể tìm thấy. If this is your first time doing web scraping with Python, we recommend you take a look at our web scraping in Python for beginners tutorial. You’ll learn all the basics you’ll need to scrape almost any HTML data you can find. If this is your first time doing web scraping with Python, we recommend you take a look at our web scraping in Python for beginners tutorial. You’ll learn all the basics you’ll need to scrape almost any HTML data you can find.

1. Tìm API ẩn để truy cập dữ liệu JSON

Chúng tôi đã biết bảng trên trang này được tạo động. Tuy nhiên, nếu chúng tôi muốn kiểm tra nó, trước tiên chúng tôi có thể xem mã nguồn của trang và tìm kiếm một chút dữ liệu từ bảng.

Chúng tôi đã sao chép tên đầu tiên và sau đó Ctrl + F để tìm phần tử và không có gì. Cái tên không tồn tại trên phiên bản chưa được ghi nhận của trang. Đây là một dấu hiệu rõ ràng cho thấy chúng tôi đang xử lý một bảng do JavaScript tạo ra.

Bây giờ, rõ ràng, hãy để Lừa mở Chrome Chrome DevTools và đi đến tab mạng> Fetch/XHR.

Trong báo cáo này, chúng tôi sẽ có thể thấy mọi yêu cầu tìm nạp được gửi bởi trình duyệt của chúng tôi. Để điền vào nó, chúng ta chỉ cần tải lại trang với tab mở.

Lưu ý: Trong kịch bản này, chỉ có một tệp được tìm nạp. Trong hầu hết các trường hợp, trang web mục tiêu của bạn sẽ gửi thêm một số yêu cầu, khiến cho việc phát hiện đúng hơn một chút. Theo nguyên tắc thông thường, bạn có thể sử dụng kích thước tệp làm tài liệu tham khảo. Tệp càng lớn, càng nhiều dữ liệu trả về, đó là một dấu hiệu tuyệt vời cho thấy nó chứa thông tin chúng tôi muốn cạo. In this scenario, there’s only one file being fetched. In most cases, your target website will send several more requests, making it a little harder to spot the correct one. As a rule of thumb, you can use the file size as a reference. The larger the file, the more data it returns, which is a great indication that it holds the information we want to scrape. In this scenario, there’s only one file being fetched. In most cases, your target website will send several more requests, making it a little harder to spot the correct one. As a rule of thumb, you can use the file size as a reference. The larger the file, the more data it returns, which is a great indication that it holds the information we want to scrape.

Bây giờ chúng tôi đã tìm thấy mục tiêu của mình, chúng tôi sẽ nhấp vào nó và chuyển đến tab Phản hồi để xem những gì trong yêu cầu này.

Tuyệt vời, có dữ liệu trên định dạng JSON đã sẵn sàng cho việc thực hiện! Để truy cập tệp này từ tập lệnh của chúng tôi, chúng tôi cần nhấp vào tab Tiêu đề để lấy URL của yêu cầu và gửi yêu cầu HTTP của chúng tôi đến URL nói.

2. Gửi yêu cầu HTTP ban đầu của chúng tôi

Gửi yêu cầu đến URL mục tiêu của chúng tôi đơn giản như lưu trữ URL vào một biến và sau đó sử dụng phương thức Yêu cầu.Get (URL) để tải xuống tệp - sẽ đủ cho trang ví dụ này.

Tuy nhiên, khi xử lý các trang web phức tạp hơn, bạn sẽ cần thêm các tiêu đề yêu cầu thích hợp để tránh bị cấm hoặc chặn. Ví dụ: nhiều trang web sử dụng cookie để xác minh rằng cái gửi yêu cầu đến tệp nguồn dữ liệu là người dùng của con người và không phải là tập lệnh.

Tin tốt là chúng tôi đã có tất cả thông tin chúng tôi cần ngay trong tab Tiêu đề mở.

Từ đây, chúng tôi sẽ chỉ lấy ba tiêu đề quan trọng nhất:

  • user-agent
  • bánh quy
  • Chấp nhận

Hãy để dịch tất cả những điều này thành Python:

import requests
url = "https://widget.sentryd.com/widget/api/instruments/latest/EUR_USD,GBP_USD,USD_JPY,USD_CAD,USD_CHF,AUD_USD,NZD_USD,EUR_GBP,EUR_JPY,EUR_CAD,EUR_CHF,EUR_AUD,GBP_JPY,GBP_CAD,GBP_CHF,GBP_AUD,USD_CNH,XAU_USD?ts=1533035674098"
r = requests.get(url)
j =r.json()
for i in j:
    print (j[i]['instrument'], j[i]['timestamp'],j[i]['bidPrice'],j[i]['offerPrice'],j[i]['currency'])
2

Sau đó, chúng ta có thể in (trang) để kiểm tra và nó sẽ trả về một phản hồi 200 - ngoài điều đó, yêu cầu đã thất bại.

3. Đọc và cạo dữ liệu JSON

Không giống như các phần tử trên tệp HTML được phân tích cú pháp, dữ liệu JSON của chúng tôi được hình thành bởi các đối tượng JSON-mỗi đối tượng giữa các dấu ngoặc xoăn {}-và các cặp hoặc thuộc tính giá trị khóa bên trong đối tượng-mặc dù chúng cũng có thể trống.

Trong ví dụ này, đối tượng JSON của chúng tôi là dữ liệu, trong khi mọi bộ thuộc tính được gọi là mảng JSON. Theo nghĩa đó, nếu máy cạo web của chúng tôi chọn đối tượng JSON, thì nó sẽ trả lại một danh sách các mảng JSON, trong khi mỗi mảng có danh sách các thuộc tính riêng.

Để thẩm vấn tệp JSON của chúng tôi, chúng tôi sẽ sử dụng phương thức .JSON () tích hợp Python () trong một biến có tên là dữ liệu để trả về đối tượng JSON của chúng tôi.

import requests
url = "https://widget.sentryd.com/widget/api/instruments/latest/EUR_USD,GBP_USD,USD_JPY,USD_CAD,USD_CHF,AUD_USD,NZD_USD,EUR_GBP,EUR_JPY,EUR_CAD,EUR_CHF,EUR_AUD,GBP_JPY,GBP_CAD,GBP_CHF,GBP_AUD,USD_CNH,XAU_USD?ts=1533035674098"
r = requests.get(url)
j =r.json()
for i in j:
    print (j[i]['instrument'], j[i]['timestamp'],j[i]['bidPrice'],j[i]['offerPrice'],j[i]['currency'])
3

Khi in biến mới của chúng tôi, nó sẽ trả về 1 vì chỉ có một đối tượng được lấy.

Chúng ta có thể sử dụng một số cách tiếp cận khác nhau để trích xuất thông tin bên trong đối tượng JSON. Tuy nhiên, chúng tôi sẽ muốn làm điều đó theo cách giúp dễ dàng xuất dữ liệu vào tệp CSV.

Để bắt đầu, chúng tôi sẽ coi mỗi mảng JSON như một mục trong danh sách để truy cập các thuộc tính nội bộ của họ bằng vị trí của chúng trong chỉ mục - bắt đầu từ 0.

Lưu ý: Logic này có thể hoạt động để chọn các khóa cụ thể mà không cần đặt tên (như trong trường hợp này) hoặc các đối tượng JSON có cùng tên nhưng các giá trị khác nhau. This logic can work to pick specific keys without naming (like in this case) or JSON objects with the same name but different values. This logic can work to pick specific keys without naming (like in this case) or JSON objects with the same name but different values.

Ở đây, một ví dụ trực quan về những gì chúng ta muốn nói:

import requests
url = "https://widget.sentryd.com/widget/api/instruments/latest/EUR_USD,GBP_USD,USD_JPY,USD_CAD,USD_CHF,AUD_USD,NZD_USD,EUR_GBP,EUR_JPY,EUR_CAD,EUR_CHF,EUR_AUD,GBP_JPY,GBP_CAD,GBP_CHF,GBP_AUD,USD_CNH,XAU_USD?ts=1533035674098"
r = requests.get(url)
j =r.json()
for i in j:
    print (j[i]['instrument'], j[i]['timestamp'],j[i]['bidPrice'],j[i]['offerPrice'],j[i]['currency'])
4

Trong

import requests
import time

s = requests.Session()
s.headers.update({'Content-Type': 'application/x-www-form-urlencoded',
                  'Accept': 'application/json',
                  'authorization': 'Basic Y3VycmVuY3lfd2lkZ2V0OmN1cnJlbmN5X3dpZGdldA=='
                  })

url = "https://widget.sentryd.com/widget/sentry/api/Pricing"
data = {'Type': 'Pricing',
        'Products': 'EUR/GBP',
        'POSTAccessCode': 'sentryPricingApi',
        'POSTAccessPassword': 'sentrypricingapi_213',
        'timestamp': str(round(time.time() * 1000))}

r = s.post(url, data=data)
print(r.json())

data['Type']= 'Volatilities'
r = s.post(url, data=data)
print(r.json())
3, chúng tôi đã yêu cầu tệp JSON được lưu trữ trong dữ liệu để trả về mảng đầu tiên trong chỉ mục trong đối tượng JSON. Đây là những gì nó trở lại:

Chúng tôi cũng có thể kiểm tra xem chúng tôi có nhận được tất cả các yếu tố của mình từ tệp JSON như thế này không:

import requests
url = "https://widget.sentryd.com/widget/api/instruments/latest/EUR_USD,GBP_USD,USD_JPY,USD_CAD,USD_CHF,AUD_USD,NZD_USD,EUR_GBP,EUR_JPY,EUR_CAD,EUR_CHF,EUR_AUD,GBP_JPY,GBP_CAD,GBP_CHF,GBP_AUD,USD_CNH,XAU_USD?ts=1533035674098"
r = requests.get(url)
j =r.json()
for i in j:
    print (j[i]['instrument'], j[i]['timestamp'],j[i]['bidPrice'],j[i]['offerPrice'],j[i]['currency'])
5

Nó trả về độ dài chính xác của các hàng mà chúng tôi muốn cạo:

Để trích xuất các thuộc tính bên trong các mảng, chúng ta có thể lặp qua từng mảng JSON và trích xuất các phần tử dựa trên vị trí của chúng trong chỉ mục như sau:

import requests
url = "https://widget.sentryd.com/widget/api/instruments/latest/EUR_USD,GBP_USD,USD_JPY,USD_CAD,USD_CHF,AUD_USD,NZD_USD,EUR_GBP,EUR_JPY,EUR_CAD,EUR_CHF,EUR_AUD,GBP_JPY,GBP_CAD,GBP_CHF,GBP_AUD,USD_CNH,XAU_USD?ts=1533035674098"
r = requests.get(url)
j =r.json()
for i in j:
    print (j[i]['instrument'], j[i]['timestamp'],j[i]['bidPrice'],j[i]['offerPrice'],j[i]['currency'])
6

Bạn có thể đặt tên cho từng thuộc tính như bạn muốn nhưng chúng tôi khuyên bạn nên tuân theo cùng một bản tin từ bảng gốc cho rõ ràng.

4. Xuất dữ liệu của chúng tôi vào tệp CSV

Bởi vì dữ liệu của chúng tôi đã được định dạng như chúng tôi muốn, việc tạo tệp CSV của chúng tôi khá đơn giản. Sau khi gửi yêu cầu của chúng tôi, chúng tôi sẽ tạo một tệp mới và thêm các tiêu đề phù hợp với dữ liệu:

import requests
url = "https://widget.sentryd.com/widget/api/instruments/latest/EUR_USD,GBP_USD,USD_JPY,USD_CAD,USD_CHF,AUD_USD,NZD_USD,EUR_GBP,EUR_JPY,EUR_CAD,EUR_CHF,EUR_AUD,GBP_JPY,GBP_CAD,GBP_CHF,GBP_AUD,USD_CNH,XAU_USD?ts=1533035674098"
r = requests.get(url)
j =r.json()
for i in j:
    print (j[i]['instrument'], j[i]['timestamp'],j[i]['bidPrice'],j[i]['offerPrice'],j[i]['currency'])
7

LƯU Ý: Don Tiết quên thêm nhập CSV ở đầu tệp của bạn. Không có nhu cầu cài đặt PIP. Don’t forget to add import csv at the top of your file. There’s no need for pip install. Don’t forget to add import csv at the top of your file. There’s no need for pip install.

Chúng tôi sẽ mã hóa từng thuộc tính được cạo vào CSV của chúng tôi bên trong vòng lặp của chúng tôi bằng phương pháp

import requests
import time

s = requests.Session()
s.headers.update({'Content-Type': 'application/x-www-form-urlencoded',
                  'Accept': 'application/json',
                  'authorization': 'Basic Y3VycmVuY3lfd2lkZ2V0OmN1cnJlbmN5X3dpZGdldA=='
                  })

url = "https://widget.sentryd.com/widget/sentry/api/Pricing"
data = {'Type': 'Pricing',
        'Products': 'EUR/GBP',
        'POSTAccessCode': 'sentryPricingApi',
        'POSTAccessPassword': 'sentrypricingapi_213',
        'timestamp': str(round(time.time() * 1000))}

r = s.post(url, data=data)
print(r.json())

data['Type']= 'Volatilities'
r = s.post(url, data=data)
print(r.json())
4.
import requests
url = "https://widget.sentryd.com/widget/api/instruments/latest/EUR_USD,GBP_USD,USD_JPY,USD_CAD,USD_CHF,AUD_USD,NZD_USD,EUR_GBP,EUR_JPY,EUR_CAD,EUR_CHF,EUR_AUD,GBP_JPY,GBP_CAD,GBP_CHF,GBP_AUD,USD_CNH,XAU_USD?ts=1533035674098"
r = requests.get(url)
j =r.json()
for i in j:
    print (j[i]['instrument'], j[i]['timestamp'],j[i]['bidPrice'],j[i]['offerPrice'],j[i]['currency'])
8

Và cuối cùng, chúng tôi đóng tệp bên ngoài vòng lặp và in () CSV được tạo như một phản hồi trực quan.

import requests
url = "https://widget.sentryd.com/widget/api/instruments/latest/EUR_USD,GBP_USD,USD_JPY,USD_CAD,USD_CHF,AUD_USD,NZD_USD,EUR_GBP,EUR_JPY,EUR_CAD,EUR_CHF,EUR_AUD,GBP_JPY,GBP_CAD,GBP_CHF,GBP_AUD,USD_CNH,XAU_USD?ts=1533035674098"
r = requests.get(url)
j =r.json()
for i in j:
    print (j[i]['instrument'], j[i]['timestamp'],j[i]['bidPrice'],j[i]['offerPrice'],j[i]['currency'])
9

5. Chạy tập lệnh của chúng tôi [Mã đầy đủ]

Xin chúc mừng, bạn đã tạo ra một cạp bảng web động đơn giản nhưng mạnh mẽ! Nếu bạn đã viết mã của mình cùng với chúng tôi, thì đây là cách mà cơ sở mã của bạn sẽ trông như thế nào:

import requests
import time

s = requests.Session()
s.headers.update({'Content-Type': 'application/x-www-form-urlencoded',
                  'Accept': 'application/json',
                  'authorization': 'Basic Y3VycmVuY3lfd2lkZ2V0OmN1cnJlbmN5X3dpZGdldA=='
                  })

url = "https://widget.sentryd.com/widget/sentry/api/Pricing"
data = {'Type': 'Pricing',
        'Products': 'EUR/GBP',
        'POSTAccessCode': 'sentryPricingApi',
        'POSTAccessPassword': 'sentrypricingapi_213',
        'timestamp': str(round(time.time() * 1000))}

r = s.post(url, data=data)
print(r.json())

data['Type']= 'Volatilities'
r = s.post(url, data=data)
print(r.json())
0

Từ việc chạy tập lệnh của chúng tôi, chúng tôi có thể trích xuất tất cả 57 hàng của bảng JavaScript ban đầu mà không cần phải sử dụng trình duyệt không đầu cũng như không lo lắng về tính năng phân trang được hiển thị ở mặt trước.

Đây là tệp kết thúc bạn nên nhận được từ tập lệnh của mình:

Mặc dù đây là một bộ dữ liệu việc làm giả, nhưng bạn rất có thể điều chỉnh tập lệnh này để cạo hầu hết mọi bảng được tạo động trên web để trích xuất các bộ dữ liệu việc làm thực tế, bóng đá, thời tiết hoặc thống kê.

Gói lên: mở rộng cạp của bạn với Scraperapi

Sử dụng các tiêu đề phù hợp có thể giành được cho bạn rất nhiều trận đánh, nhưng đã giành được đủ nếu bạn muốn mở rộng quy mô các dự án của mình cho các ứng dụng kinh doanh hoặc thu thập lượng dữ liệu khổng lồ. Trong những trường hợp đó, bạn sẽ cần bảo vệ cào web của mình khó hơn nhiều bằng cách tạo các chức năng để xử lý xoay vòng IP và captchas, duy trì các nhóm proxy đắt tiền và thử lại mọi yêu cầu thất bại.

Scraperapi được thiết kế để xử lý tất cả những phức tạp này cho bạn bằng cách chỉ thêm một chuỗi vào yêu cầu ban đầu của bạn.

Để tích hợp API của chúng tôi vào cơ sở mã của bạn, trước tiên hãy tạo tài khoản Scraperapi miễn phí để tạo khóa API của bạn. Từ bảng điều khiển của bạn, bạn sẽ có thể sao chép khóa của mình và truy cập toàn bộ tài liệu Scraperapi.

Với thông tin mới này, chúng tôi sẽ thay đổi URL ban đầu theo cấu trúc này:

import requests
import time

s = requests.Session()
s.headers.update({'Content-Type': 'application/x-www-form-urlencoded',
                  'Accept': 'application/json',
                  'authorization': 'Basic Y3VycmVuY3lfd2lkZ2V0OmN1cnJlbmN5X3dpZGdldA=='
                  })

url = "https://widget.sentryd.com/widget/sentry/api/Pricing"
data = {'Type': 'Pricing',
        'Products': 'EUR/GBP',
        'POSTAccessCode': 'sentryPricingApi',
        'POSTAccessPassword': 'sentrypricingapi_213',
        'timestamp': str(round(time.time() * 1000))}

r = s.post(url, data=data)
print(r.json())

data['Type']= 'Volatilities'
r = s.post(url, data=data)
print(r.json())
1

Vì vậy, URL cuối cùng của bạn sẽ trông giống như thế này:

import requests
import time

s = requests.Session()
s.headers.update({'Content-Type': 'application/x-www-form-urlencoded',
                  'Accept': 'application/json',
                  'authorization': 'Basic Y3VycmVuY3lfd2lkZ2V0OmN1cnJlbmN5X3dpZGdldA=='
                  })

url = "https://widget.sentryd.com/widget/sentry/api/Pricing"
data = {'Type': 'Pricing',
        'Products': 'EUR/GBP',
        'POSTAccessCode': 'sentryPricingApi',
        'POSTAccessPassword': 'sentrypricingapi_213',
        'timestamp': str(round(time.time() * 1000))}

r = s.post(url, data=data)
print(r.json())

data['Type']= 'Volatilities'
r = s.post(url, data=data)
print(r.json())
2

Bằng cách gửi yêu cầu của chúng tôi thông qua máy chủ của Scraperapi, API sẽ sử dụng nhiều năm phân tích thống kê và học máy để xác định đó là sự kết hợp tốt nhất giữa các tiêu đề và địa chỉ IP để yêu cầu thành công, hãy thử lại mọi nỗ lực không thành công, xử lý CAPTCHA và IPS bị chặn, và xoay IP của bạn cho mọi yêu cầu bắt chước người dùng hữu cơ.

Hơn nữa, bạn có thể đặt kết xuất = true trong chuỗi URL và Scraperapi sẽ hiển thị HTML trước khi trả lại. Nó có thể là siêu tiện dụng cho những khoảnh khắc mà không có điểm cuối API nào để dự phòng như chúng tôi đã làm trong hướng dẫn này.

Nếu bạn có bất kỳ câu hỏi nào về những gì chúng tôi đã làm hôm nay, đừng ngần ngại liên hệ với chúng tôi thông qua trang web hoặc Twitter của chúng tôi. Chúng tôi luôn luôn sẵn sàng giúp bạn tìm và cạo những gì bạn cần.

Hạnh phúc cào!

Làm thế nào để bạn cạo nội dung động trong Python?

Selenium khởi tạo và dòng chảy như sau:...

Xác định và thiết lập biến đường dẫn Chrome ..

Xác định và thiết lập biến đường dẫn Chrome WebDriver ..

Xác định các đối số khởi chạy trình duyệt (để sử dụng chế độ không đầu, proxy, v.v.).

khởi tạo một webdriver với các tùy chọn được xác định ở trên ..

Tải một trang web qua WebDriver khởi tạo ..

Bạn có thể cạo một trang web năng động?

Có hai cách tiếp cận để cạo một trang web động: Xóa nội dung trực tiếp từ JavaScript.Quét trang web khi chúng tôi xem nó trong trình duyệt của chúng tôi - sử dụng các gói Python có khả năng thực hiện JavaScript.Scrape the content directly from the JavaScript. Scrape the website as we view it in our browser — using Python packages capable of executing the JavaScript.Scrape the content directly from the JavaScript. Scrape the website as we view it in our browser — using Python packages capable of executing the JavaScript.

Python có tốt cho việc quét dữ liệu không?

Bộ sưu tập lớn các thư viện: Python có một bộ sưu tập lớn các thư viện như Numpy, Matlplotlib, Pandas, v.v., cung cấp các phương pháp và dịch vụ cho các mục đích khác nhau.Do đó, nó phù hợp để cạo web và để thao tác thêm dữ liệu được trích xuất.it is suitable for web scraping and for further manipulation of extracted data.it is suitable for web scraping and for further manipulation of extracted data.

Selenium có tốt cho việc cạo không?

Selenium là một thư viện và công cụ Python được sử dụng để tự động hóa các trình duyệt web để thực hiện một số tác vụ.Một trong những điều đó là xẹp web để trích xuất dữ liệu và thông tin hữu ích có thể không có sẵn.web-scraping to extract useful data and information that may be otherwise unavailable.web-scraping to extract useful data and information that may be otherwise unavailable.