Создание таблицы с сайта (не удается найти таблицу или атрибут)

#python #web-scraping #beautifulsoup

#python #веб-очистка #beautifulsoup

Вопрос:

Я пытаюсь создать таблицу на http://tickertrak.com / но я не могу этого сделать. Код ничего не читает после тега таблицы, и я даже не вижу его, поэтому я просто в замешательстве. Я новичок в webscraping и до сих пор мог создавать таблицы Википедии.

 import time
!pip install selenium
!apt install chromium-chromedriver
!cp /usr/lib/chromium-browser/chromedriver /usr/bin
import sys
sys.path.insert(0,'/usr/lib/chromium-browser/chromedriver')
import pandas as pd
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.headless = True
driver = webdriver.Chrome(options=options)

driver.get("http://tickertrak.com/")
time.sleep(2)

df = pd.read_html(driver.page_source, flavor="bs4")
df = pd.concat(df)
df.drop(index=0, axis=0, inplace=True)
df.to_csv("your_table.csv", index=False)`
 

Я получаю ошибки в строке:

 driver = webdriver.Chrome(options=options)
 

для исключения webdriverexception. Я где-то забыл путь?

Комментарии:

1. Прекратите задавать несколько вопросов за один раз и не редактируйте свой пост, чтобы включить в него какой-либо ответ, который у вас есть.

Ответ №1:

Эта таблица генерируется динамически с помощью JS ( JavaScript ), поэтому вы не получите данные с помощью простого requests и bs4 .

Тем не менее, вы можете попробовать selenium и объединить его с panadas .

Вот как:

 import time

import pandas as pd
from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.headless = True
driver = webdriver.Chrome(options=options)

driver.get("http://tickertrak.com/")
time.sleep(2)

df = pd.read_html(driver.page_source, flavor="bs4")
df = pd.concat(df)
df.drop(index=0, axis=0, inplace=True)
df.to_csv("your_table.csv", index=False)

 

В результате создается .csv файл, который выглядит следующим образом:

введите описание изображения здесь

Комментарии:

1. Привет @baduker В настоящее время у меня возникла проблема и я получаю ошибки от `driver = webdriver. Chrome (параметры = параметры)

2. Сначала вам необходимо установить драйвер. Посмотрите это .

3. Я отредактировал свой пост, чтобы показать свой код. Я считаю, что я отформатировал его для загрузки. Возможно, путь перепутан?

4. В какой системе вы работаете?

5. Я использую Google collab notebook. Мой план состоит в том, чтобы очистить, а затем сбросить это в Google Sheet. Надеюсь, что это поможет и спасибо за помощь до сих пор

Ответ №2:

Это один из самых быстрых способов получения данных с помощью модуля запросов с этой веб-страницы, поскольку данные уже находятся в источнике страницы в теге script. Все, что вы хотите сделать сейчас, это очистить данные перед их сохранением в dataframe.

 import re
import requests

URL = 'http://tickertrak.com/'

with requests.Session() as s:
    s.headers['User-Agent'] = 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.104 Safari/537.36'
    r = s.get(URL)
    items = re.findall(r"var arrayFromPHP = [(.*?)];",r.text)[0]
    trs = re.findall(r"[(.*?)]",items)
    for tds in trs:
        print(tds)
 

Вывод выглядит так:

 "Options","gamestop corp","gme","1","58662","131","-80","-85","1"
"Options","amc entertainment holdings inc","AMC","1","16290","36","-79","-66","2"
"Options","nokia corp","nok","1","3568","14","-86","-88","3"
"Options","regal-beloit corp","RBC","1","3254","11","-56","-89","4"
"Options","blackberry ltd","BB","1","3002","10","-91","-92","5"