簡體   English   中英

Selenium & Beautiful Soup scraping 返回意外結果

[英]Selenium & Beautiful Soup scraping is returning an unexpected result

USPTO 網站提供每周更新的公共數據。 每次他們發布新數據時,他們都會以上周的“增量數據”形式發布。 我嘗試使用 python 下載這些數據,所以我不必每周手動進行。

在此處輸入圖像描述 發生了一些奇怪的事情: 在此處輸入圖像描述

首先, browser.page_source包含 html (但不是正確的 - 我檢查過)。 但是,當我將 html(作為字符串)傳遞給 BeatifulSoup 時, soup.current_data為空。

其次,返回的 html 不是完整的 html 並且根本不包含delta或該部分,即使它位於瀏覽器中的站點 html 中:

在此處輸入圖像描述

關於如何下載該文件的任何想法? 我最終需要調用deltaJsonDownload() js function。

重現代碼:

from bs4 import BeautifulSoup
from selenium import webdriver


url = 'https://ped.uspto.gov/peds/'
browser = webdriver.PhantomJS(executable_path='/usr/bin/phantomjs')
browser.get(url)
html = browser.page_source
soup = BeautifulSoup(browser.page_source)
assert('delta' in browser.page_source)

當您分析網站網絡調用時,它會發出 ajax 請求以獲取所有鏈接以供下載數據。

import requests

res = requests.get("https://ped.uspto.gov/api/")

data = res.json()

print(data)

Output:

{'message': None,
 'helpText': '{}',
 'xmlDownloadMetadata': [{'lastUpdated': 'Sat 15 Aug 2020 01:30:57-0400',
   'sizeInBytes': 10429068701,
   'fileName': 'pairbulk-delta-20200815-xml',
   'updatedFile': False},
  {'lastUpdated': 'Sun 09 Aug 2020 10:20:10-0400',
   'sizeInBytes': 100685778,
   'fileName': '1900-1919-pairbulk-full-20200809-xml',
   'updatedFile': False},
  {'lastUpdated': 'Sun 09 Aug 2020 10:20:14-0400',
   'sizeInBytes': 13877,
   'fileName': '1920-1939-pairbulk-full-20200809-xml',
   'updatedFile': False},
  {'lastUpdated': 'Sun 09 Aug 2020 10:20:15-0400',
   'sizeInBytes': 93016,
   'fileName': '1940-1959-pairbulk-full-20200809-xml',
   'updatedFile': False},
  {'lastUpdated': 'Sun 09 Aug 2020 10:20:15-0400',
   'sizeInBytes': 82353484,
   'fileName': '1960-1979-pairbulk-full-20200809-xml',
   'updatedFile': False},
  {'lastUpdated': 'Sun 09 Aug 2020 10:20:16-0400',
   'sizeInBytes': 5019098918,
   'fileName': '1980-1999-pairbulk-full-20200809-xml',
   'updatedFile': False},
  {'lastUpdated': 'Sun 09 Aug 2020 10:20:46-0400',
   'sizeInBytes': 33231977060,
   'fileName': '2000-2019-pairbulk-full-20200809-xml',
   'updatedFile': False},
  {'lastUpdated': 'Sun 09 Aug 2020 10:23:23-0400',
   'sizeInBytes': 24313575,
   'fileName': '2020-2020-pairbulk-full-20200809-xml',
   'updatedFile': False}],
 'jsonDownloadMetadata': [{'lastUpdated': 'Sat 15 Aug 2020 03:08:00-0400',
   'sizeInBytes': 5957650088,
   'fileName': 'pairbulk-delta-20200815-json',
   'updatedFile': False},
  {'lastUpdated': 'Sun 09 Aug 2020 15:18:23-0400',
   'sizeInBytes': 66467976,
   'fileName': '1900-1919-pairbulk-full-20200809-json',
   'updatedFile': False},
  {'lastUpdated': 'Sun 09 Aug 2020 15:18:25-0400',
   'sizeInBytes': 10100,
   'fileName': '1920-1939-pairbulk-full-20200809-json',
   'updatedFile': False},
  {'lastUpdated': 'Sun 09 Aug 2020 15:18:27-0400',
   'sizeInBytes': 69891,
   'fileName': '1940-1959-pairbulk-full-20200809-json',
   'updatedFile': False},
  {'lastUpdated': 'Sun 09 Aug 2020 15:18:29-0400',
   'sizeInBytes': 54076774,
   'fileName': '1960-1979-pairbulk-full-20200809-json',
   'updatedFile': False},
  {'lastUpdated': 'Sun 09 Aug 2020 15:18:31-0400',
   'sizeInBytes': 3009216952,
   'fileName': '1980-1999-pairbulk-full-20200809-json',
   'updatedFile': False},
  {'lastUpdated': 'Sun 09 Aug 2020 15:18:46-0400',
   'sizeInBytes': 18853619536,
   'fileName': '2000-2019-pairbulk-full-20200809-json',
   'updatedFile': False},
  {'lastUpdated': 'Sun 09 Aug 2020 15:20:30-0400',
   'sizeInBytes': 17518389,
   'fileName': '2020-2020-pairbulk-full-20200809-json',
   'updatedFile': False}],
 'links': [{'rel': 'swagger-api-docs', 'href': '/api-docs'}]}

解析 json 並使用這些鏈接,您可以輕松下載您正在尋找的文件。 但我會說這些文件是相當大的文件,最好在請求中使用流式下載。

您要查找的鏈接是data["jsonDownloadMetadata"]中的第一個元素

為了獲得可下載的鏈接,請解析 json

data = res.json()

for links in data["jsonDownloadMetadata"]:
    print(f"https://ped.uspto.gov/api/full-download?fileName={links['fileName']}")

Output:

https://ped.uspto.gov/api/full-download?fileName=pairbulk-delta-20200815-json
https://ped.uspto.gov/api/full-download?fileName=1900-1919-pairbulk-full-20200809-json
https://ped.uspto.gov/api/full-download?fileName=1920-1939-pairbulk-full-20200809-json
https://ped.uspto.gov/api/full-download?fileName=1940-1959-pairbulk-full-20200809-json
https://ped.uspto.gov/api/full-download?fileName=1960-1979-pairbulk-full-20200809-json
https://ped.uspto.gov/api/full-download?fileName=1980-1999-pairbulk-full-20200809-json
https://ped.uspto.gov/api/full-download?fileName=2000-2019-pairbulk-full-20200809-json
https://ped.uspto.gov/api/full-download?fileName=2020-2020-pairbulk-full-20200809-json

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM