Какой самый лучший (самый быстрый) способ просмотра веб-страниц? - PullRequest
0 голосов
/ 23 марта 2019

Я пытаюсь собрать данные из Google Patents и обнаружил, что время выполнения занимает слишком много времени. Как я могу увеличить скорость? Выполнение 8000 патентов заняло уже 7 часов ...

Вот пример патента.

Мне нужно получить данные из таблиц ниже и записать их в CSV-файл. Я думаю, что горлышко бутылки находится на WebDriverWait(driver, 10).until(EC.presence_of_element_located((By.XPATH, "//div[@class='table style-scope patent-result']")))

Это необходимо, или я могу использовать find_elements_by_css_selector и проверить, возвращает ли это что-нибудь?

#...
from selenium.webdriver.support import expected_conditions as EC
#...

##  read file of patent numbers and initiate chrome

url = "https://patents.google.com/patent/US6403086B1/en?oq=US6403086B1"

for x in patent_number:

    #url = new url with new patent number similar to above

    try: 
        driver.get(url) 
        driver.set_page_load_timeout(20) 
    except: 
        #--write to csv
        continue

    if "404" in driver.title: #patent number not found
        #--write to csv
        continue

    try: 
        WebDriverWait(driver, 10).until(
            EC.presence_of_element_located((By.XPATH, "//div[@class='table style-scope patent-result']"))
        )
    except: 
        #--write to csv
        continue


    ##  rest of code to get data from tables and write to csv

Существует ли более эффективный способ определения наличия этих таблиц на странице патента? Или была бы разница, если бы я использовал BeautifulSoup?

Я новичок в websraping, поэтому любая помощь будет принята с благодарностью:)

1 Ответ

2 голосов
/ 23 марта 2019

Не уверен, за какими таблицами вы работаете, но подумайте, что вы можете использовать запросы и панды для захвата таблиц, а также сеанс для повторного использования соединения.

import requests
from bs4 import BeautifulSoup as bs
import pandas as pd

codes = ['US6403086B1','US6403086B1'] #patent numbers to come from file
with requests.Session() as s:
    for code in codes:
        url = 'https://patents.google.com/patent/{}/en?oq={}'.format(code, code)
        r = s.get(url)
        tables = pd.read_html(str(r.content))
        print(tables)  #example only. Remove later
       #here would add some tidying up to tables e.g. dropNa rows, replace NaN with '' .... 
       # rather than print... whatever steps to store info you want until write out
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...