【问题标题】:Adding multiple arrays to a MySQL Table将多个数组添加到 MySQL 表
【发布时间】:2013-05-21 09:53:22
【问题描述】:

我编写了一个脚本来抓取多个 url,在 BeautifulSoup 的帮助下将有用的信息添加到两个数组(id 和名称)中,然后将这些数组的值添加到 ids[0] 和 names[0 的 MySQL 表中] 是表格的第 0 行,以此类推...

但是我的代码非常难看,我相信有比我更好的方法。

谁能给我一个提示?我特别需要关于如何遍历这两个数组的输入...

提前致谢!

#!/usr/bin/env python
from bs4 import BeautifulSoup
from urllib import urlopen
import MySQLdb 

#MySQL Connection
mysql_opts = {
    'host': "localhost",
    'user': "********",
    'pass': "********",
    'db':   "somedb"
    }
mysql = MySQLdb.connect(mysql_opts['host'], mysql_opts['user'], mysql_opts['pass'], mysql_opts['db']) 

#Add Data SQL Query
data_query = ("INSERT INTO tablename "
               "(id, name) "
               "VALUES (%s, %s)")

#Urls to scrape
url1  = 'http://somepage.com'
url2  = 'http://someotherpage.com'
url3  = 'http://athirdpage.com'

#URL Array
urls = (url1,url2,url3)

#Url loop
for url in urls:
    soupPage = urlopen(url)
    soup = BeautifulSoup (soupPage)

    ids = soup.find_all('a', style="display:block")
    names = soup.find_all('a', style="display:block")

    i = 0
    print ids.count
    while (i < len(ids)):
        try: 
            id = ids[i]
            vid = id['href'].split('=')
            vid = vid[1]
        except IndexError:
            id = "leer"

        try:
            name = names[i]
            name = name.contents[0]
            name = name.encode('iso-8859-1')
        except IndexError:
            name = ""

        data_content = (vid, name)
        cursor.execute(data_query, data_content)
        emp_no = cursor.lastrowid
        i = i + 1

【问题讨论】:

  • 我想我找到了答案:for id, name in newlist(ids, names): #do something with it... print(id, name) 有人可以确认这是最好的方法吗? => stackoverflow.com/questions/1663807/…
  • 更正:for id, name in zip(ids, names): #do something with it... print(id, name)

标签: python mysql arrays


【解决方案1】:

我的评论似乎就是答案。刚刚测试过:

for vid, name in zip(ids, names):
        vid = vid['href'].split('=')
        vid = vid[1]

        name = name.contents[0]
        name = name.encode('iso-8859-1')

        data_content = (vid, name)
        cursor.execute(data_query, data_content)
        emp_no = cursor.lastrowid

更常见的形式见:How can I iterate through two lists in parallel?

抱歉重复。 如果有人可以在答案中添加一些内容,请随意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    • 1970-01-01
    • 2017-12-22
    • 2012-09-11
    • 1970-01-01
    相关资源
    最近更新 更多