Как переместить данные, очищенные с помощью Beautifulsoup, в базу данных MySQL? - PullRequest
1 голос
/ 10 апреля 2019

Я новичок в Beautifulsoup, и я пытался загрузить отдельные элементы td в таблицу MySQL. Как мне отделить каждый тд, чтобы потом можно было заполнять его таблицей MySQL?

Я пытался разобраться с тэгом, но я тоже что-то не так делаю.

html_url = 'https://markets.wsj.com/'
html_doc = urllib.request.urlopen(html_url).read()

soup = BeautifulSoup(html_doc, 'html.parser')
markets = soup.find(id='majorStockIndexes_moduleId')

marketRows = markets.tbody.find_all('tr')

for row in marketRows:
    for column in row.find_all('td'):
        print(column.text)
        columnType = column.text

query = "INSERT INTO MarketData1 (recordID, stock, last, priceChange, percentChange) VALUES (NULL, %s, %s, %s, %s)"
arguments = (stockName, lastValue, priceChange, percentChange)

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

тд класс "firstCol" - stockName тд класс "dataCol" - lastValue td class "dataCol priceDown - изменение цены td class "dataCol последняя ценаDown - процент изменения

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Этот код поможет вам, вам просто нужно настроить учетные данные MySQL.

import urllib
import mysql.connector
from bs4 import BeautifulSoup

html_url = 'https://markets.wsj.com/'
html_doc = urllib.request.urlopen(html_url).read()

soup = BeautifulSoup(html_doc, 'html.parser')
markets = soup.find(id='majorStockIndexes_moduleId')

marketRows = markets.tbody.find_all('tr')


mydb = mysql.connector.connect(
  host="localhost",
  user="root",
  passwd="root",
    database="mydatabase"
)
mycursor = mydb.cursor()


for column in marketRows:
    stockName = column.find('td',class_='firstCol').text.strip()
    lastValue = column.find('td',class_='dataCol').text
    priceChange = column.find('td',class_='priceDown').text
    percentChange = column.find('td',class_='last').text

    print("stockname :",stockName)
    print('lastValue :',lastValue)
    print("priceChange :",priceChange)
    print("percentChange :",percentChange)
    print()

    query = "INSERT INTO MarketData1 (recordID, stock, last, priceChange, percentChange) VALUES (NULL, %s, %s, %s, %s)"

    arguments = (stockName, lastValue, priceChange, percentChange)

    mycursor.execute(query, arguments)

    mydb.commit()
0 голосов
/ 10 апреля 2019

row.find_all('td') дает вам список со всеми td в строке, поэтому вам нужно только преобразовать в список с текстом из каждого td

    all_td = row.find_all('td')
    arguments = [x.text.strip() for x in all_td]

, а затем у вас есть аргументы для INSERT

import urllib.request
from bs4 import BeautifulSoup

html_url = 'https://markets.wsj.com/'
html_doc = urllib.request.urlopen(html_url).read()

soup = BeautifulSoup(html_doc, 'html.parser')
markets = soup.find(id='majorStockIndexes_moduleId')

marketRows = markets.tbody.find_all('tr')

for row in marketRows:
    all_td = row.find_all('td')
    arguments = [x.text.strip() for x in all_td]
    print(arguments)
    # ... here INSERT data to database ...

Отображаемые данные

['DJIA', '26150.58', '-190.44', '-0.72%']
['Nasdaq', '7909.28', '-44.61', '-0.56%']
['S&P 500', '2878.20', '-17.57', '-0.61%']
['Russell 2000', '1559.68', '-19.32', '-1.22%']
['Global Dow', '3061.02', '-4.21', '-0.14%']
['Japan: Nikkei 225', '21653.01', '-149.58', '-0.69%']
['Stoxx Europe 600', '385.68', '-1.83', '-0.47%']
['UK: FTSE 100', '7425.57', '-26.32', '-0.35%']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...