Соскребание с BS4 - с помощью регулярных выражений - сохранение в sqlite - PullRequest
0 голосов
/ 10 июля 2019

Я использую код ниже, чтобы очистить веб-сайт, а затем сохранить эти данные в таблицу sqlite. Моя проблема с регулярным выражением после for n in str(shark):, по какой-то причине place, date, article = groups[1], groups[2], groups[3] не хранит никаких данных и, следовательно, не получает ввод в мою БД. Дело в том, что когда я запускаю следующий код в моем реплее group = re.match(r'(.*?)\W+—?\W+On\W+(.*?\d{4})\W*(.*)', str(shark[1]), flags=re.DOTALL), я могу получить проанализированный текст из своего списка акул. Есть идеи почему?

import pandas as pd

import re ## added 
import bs4
import sqlite3
import requests
import textwrap

'''
Let's pull some fresh shark data!

'''

res = requests.get('http://www.sharkresearchcommittee.com/pacific_coast_shark_news.htm')
res.raise_for_status()
soup = bs4.BeautifulSoup(res.text, 'html.parser')

shark = []
for i in range(1, 100): # attempting to grab the most recent added paragraph 

    elems = soup.select('body > div > div > center > table > tr > td:nth-of-type(2) > p:nth-of-type({})'.format(i))
    for i in elems:
        #print("—" in str(i))
        if '—' in str(i):
            text = bs4.BeautifulSoup(str(i), 'html.parser')
            shark.append(text)
            #print(text)

'''

'''
c = sqlite3.connect('shark.db')
try:
    c.execute('''CREATE TABLE
                    mytable (Location        STRING,
                             Date            STRING,
                             Description     STRING)''')
except sqlite3.OperationalError: #i.e. table exists already
    pass

for n in str(shark):
        groups = re.match(r'(.*?)\W+—?\W+On\W+(.*?\d{4})\W*(.*)', n, flags=re.DOTALL)

        if not groups:
            continue
        place, date, article = groups[1], groups[2], groups[3]
        print(place)

        c.execute('''INSERT INTO mytable(Location, Date, Description) VALUES(?,?,?)''',
            (place, date, article))
c.commit()

'''
Read into python
'''
df = pd.read_sql_query("select * from mytable;",c)

печать (ДФ)

1 Ответ

0 голосов
/ 10 июля 2019

Проблема в str() в

for n in str(shark):

Конвертирует список shark в одну строку, но при этом необходимо конвертировать каждый элемент n отдельно

for n in shark:
    n = str(n)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...