脚本可以执行成功,数据库只有一条数据,这是为什么?

来源:4-1 存储数据到MySQL

慕粉3745191

2017-04-08 17:39

http://img.mukewang.com/58e8af51000181dc04800054.jpg

脚本可以执行成功,数据库只有一条数据,这是为什么?

写回答 关注

9回答

  • 追逐奔跑
    2017-04-09 15:21:44
    已采纳
    #我刚刚测试了自己的代码,发现完全没有问题
    #首先,这样,你把下面这段代码完全复制到你的运行环境进行测试
    from urllib.request import urlopen
    from bs4 import BeautifulSoup
    import re
    import pymysql.cursors
    resp = urlopen("https://en.wikipedia.org/wiki/Main_Page").read().decode("utf-8")
    soup = BeautifulSoup(resp,"html.parser")
    listUrls = soup.findAll("a",href=re.compile(r"^/wiki/"))
    for url in listUrls:
       if not re.search("\.(jpg|JPG)$", url["href"]):
        print(url.get_text(),"<---->","https://en.wikipedia.org"+url["href"])
        #这里要缩进,不然后面面取得URL的值就是for遍历的卒子后一个值,才会出现在打印过程中没有问题,
        #但是插入数据库出现问题,
        #不过我觉得在遍历过程的外面连接数据库可能好点,我觉得每一次遍历都会连接数据库的代价太高了
        connection=pymysql.connect(
           host='localhost',
           user='root',
           password='lqmysql',
           db='wikiurl',
           charset='utf8mb4'
        )
        try:
         with connection.cursor() as cursor:
             sql="insert into `urls`(`urlhref`,`urlname`)values(%s,%s)"
             cursor.execute(sql,(url.get_text(),"https://en.wikipedia.org"+url["href"]))
             connection.commit()
        finally:
           connection.close()
    #查看自己的运行结果,应该没有什么问题,我的就是这样的
    #
    #
    #然后,你复制下面这段代码去测试一下
    from urllib.request import urlopen
    from bs4 import BeautifulSoup
    import re
    import pymysql.cursors
    resp = urlopen("https://en.wikipedia.org/wiki/Main_Page").read().decode("utf-8")
    soup = BeautifulSoup(resp,"html.parser")
    listUrls = soup.findAll("a",href=re.compile(r"^/wiki/"))
    for url in listUrls:
        if not re.search("\.(jpg|JPG)$", url["href"]):
         print(url.get_text(),"<---->","https://en.wikipedia.org"+url["href"])
    connection=pymysql.connect(
        host='localhost',
        user='root',
        password='lqmysql',
        db='wikiurl',
        charset='utf8mb4'
    )
    try:
      with connection.cursor() as cursor:
          sql="insert into `urls`(`urlhref`,`urlname`)values(%s,%s)"
          cursor.execute(sql,(url.get_text(),"https://en.wikipedia.org"+url["href"]))
          connection.commit()
    finally:
        connection.close()
    #这一次,应该只有一条语句插入了
    #每次运行完,可视化数据库软件要记得刷新一下


    慕粉3745...

    解决了

    2017-04-09 16:15:35

    共 1 条回复 >

  • _夕晨踏雪
    2017-07-12 11:10:58

    果然是格式问题,前车之鉴.....

  • _夕晨踏雪
    2017-07-12 10:26:11

    我的天,我也遇到了这个问题,,,,,好气

  • 慕粉3745191
    2017-04-09 16:12:26

    解决了……

    追逐奔跑

    如果是我猜对了问题所在,希望你采纳哦~~~

    2017-04-09 16:17:59

    共 1 条回复 >

  • 慕粉3745191
    2017-04-09 15:07:21

    http://img.mukewang.com/58e9dd7e0001a73e04680138.jpg

    看上图

  • 追逐奔跑
    2017-04-09 14:52:20
    from urllib.request import urlopen
    from bs4 import BeautifulSoup
    import re
    import pymysql.cursors
    resp = urlopen("https://en.wikipedia.org/wiki/Main_Page").read().decode("utf-8")
    soup = BeautifulSoup(resp,"html.parser")
    listUrls = soup.findAll("a",href=re.compile("^/wiki/"))
    for url in listUrls:
       if not re.search("\.(jgp||JPG)$", url["href"]):
        print(url.get_text(),"<---->","https://en.wikipedia.org"+url["href"])
        #这里要缩进,不然后面面取得URL的值就是for遍历的卒子后一个值,才会出现在打印过程中没有问题,
        #但是插入数据库出现问题,
        #不过我觉得在遍历过程的外面连接数据库可能好点,我觉得每一次遍历都会连接数据库的代价太高了
        connection=pymysql.connect(
           host='localhost',
           user='root',
           password='lqmysql',
           db='wikiurl',
           charset='utf8mb4'
        )
        try:
         with connection.cursor() as cursor:
             sql="insert into `urls`(`urlhref`,`urlname`)values(%s,%s)"
             cursor.execute(sql,(url.get_text(),"https://en.wikipedia.org"+url["href"]))
             connection.commit()
        finally:
           connection.close()


    慕粉3745...

    还是一样,,,我排查了,运行一次脚本,数据库增加一条。插入的是最后的一条数据。

    2017-04-09 15:06:20

    共 1 条回复 >

  • 慕粉3745191
    2017-04-09 14:38:13

    from urllib.request import urlopen
    from bs4 import BeautifulSoup
    import re
    import pymysql.cursors
    resp = urlopen("https://en.wikipedia.org/wiki/Main_Page").read().decode("utf-8")
    soup = BeautifulSoup(resp,"html.parser")
    listUrls = soup.findAll("a",href=re.compile("^/wiki/"))
    for url in listUrls:
       if not re.search("\.(jgp||JPG)$", url["href"]):
        print(url.get_text(),"<---->","https://en.wikipedia.org"+url["href"])
    connection=pymysql.connect(
       host='localhost',
       user='root',
       password='lqmysql',
       db='wikiurl',
       charset='utf8mb4'
    )
    try:
     with connection.cursor() as cursor:
         sql="insert into `urls`(`urlhref`,`urlname`)values(%s,%s)"
         cursor.execute(sql,(url.get_text(),"https://en.wikipedia.org"+url["href"]))
         connection.commit()
    finally:
       connection.close()

    慕粉3745... 回复追逐奔跑

    这个要怎么排查?

    2017-04-09 14:52:40

    共 2 条回复 >

  • 追逐奔跑
    2017-04-09 14:31:21

    额,帅哥,总共不到100行代码,你完全可以全部粘出来的,单独这一部分应该是没有问题的。


    慕粉3745...

    我运行一次脚本,数据库里插入一条数据

    2017-04-09 14:39:20

    共 1 条回复 >

  • 追逐奔跑
    2017-04-08 18:01:18

    是不是数据库操作成了update?明显是没有Insert吧

    慕粉3745... 回复追逐奔跑

    try: with connection.cursor() as cursor: sql="insert into `urls`(`urlhref`,`urlname`)values(%s,%s)" cursor.execute(sql,(url.get_text(),"https://en.wikipedia.org"+url["href"])) connection.commit() finally: connection.close()

    2017-04-09 14:28:34

    共 3 条回复 >

python遇见数据采集

本教程让你初步掌握Python进行数据采集,创造属于你的价值

59669 学习 · 200 问题

查看课程

相似问题