尝试将刮取的值导入MySQL表时抛出警告 - 使用Python和BS4

时间:2016-04-20 19:35:04

标签: python mysql web-scraping beautifulsoup warnings

当我尝试将指定的值导入指定的MySQL表时,我收到截断的数据警告。

这些值存储在SQL表中,减去"美国"其中一个日期有大量的" "在它之后。

如何转换值以使截断值更加合适?

 : Warning: Data truncated for column 'last_count' at row 1
cur.execute('INSERT IGNORE INTO RIGCOUNT (area, last_count, count, change_from_prior_count, date_of_prior_count, change_from_last_year, date_of_last_year_count) VALUES (\"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\", \"%s\")',(area, last_count, count, change_from_prior_count, date_of_prior_count, change_from_last_year, date_of_last_year_count))
{'count': u'440', 'area': u'U.S.', 'change_from_prior_count': u'-3', 'last_count': u'15 April\r\n                  2016', 'change_from_last_year': u'-514', 'date_of_last_year_count': u'17 April 2015', 'date_of_prior_count': u'8 April 2016'}

import scraperwiki
import requests
from bs4 import BeautifulSoup
import csv
import MySQLdb

#mysql portion
mydb = MySQLdb.connect(host='localhost',
       user= '********',
       passwd='*******',
       db='testdb')
 cur = mydb.cursor()

def store (area, last_count, count, change_from_prior_count, date_of_prior_count, change_from_last_year, date_of_last_year_count):
    cur.execute('INSERT IGNORE INTO RIGCOUNT (area, last_count, count, change_from_prior_count, date_of_prior_count, change_from_last_year, date_of_last_year_count) VALUES (\"%s\",$
    cur.connection.commit()


base_url = 'http://phx.corporate-ir.net/phoenix.zhtml?c=79687&p=irol-rigcountsoverview'
html = requests.get(base_url)
soup = BeautifulSoup(html.content, "html.parser")

table = soup.findAll('table')
rows = table[1].findAll("tr")
if len(soup.findAll('tr')) > 0:
    rows = rows[1:]
for row in rows:
    cells = row.findAll('td')
    area = cells[0].get_text()
    last_count =  cells[1].get_text()
    count = cells[2].get_text()
    change_from_prior_count = cells[3].get_text()
    date_of_prior_count = cells[4].get_text()
    change_from_last_year = cells[5].get_text()
    date_of_last_year_count = cells[6].get_text()
    store(area, last_count, count, change_from_prior_count, date_of_prior_count, change_from_last_year, date_of_last_year_count)
    data = {
       'area': cells[0].get_text(),
       'last_count': cells[1].get_text(),
       'count': cells[2].get_text(),
       'change_from_prior_count': cells[3].get_text(),
       'date_of_prior_count': cells[4].get_text(),
       'change_from_last_year': cells[5].get_text(),
       'date_of_last_year_count': cells[6].get_text(),
    }

    print data
    print '\n'
mydb.close()

1 个答案:

答案 0 :(得分:0)

  

......其中一个日期之后有大量的“”。

您只需使用正则表达式替换多个whispace即可。

=TRIM(MID(SUBSTITUTE(A1,"""",REPT(" ",99)),297,99))