为了账号安全,请及时绑定邮箱和手机立即绑定

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

http://img1.sycdn.imooc.com//58e8af51000181dc04800054.jpg

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

正在回答

9 回答

#我刚刚测试了自己的代码,发现完全没有问题
#首先,这样,你把下面这段代码完全复制到你的运行环境进行测试
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()
#这一次,应该只有一条语句插入了
#每次运行完,可视化数据库软件要记得刷新一下


0 回复 有任何疑惑可以回复我~
#1

慕粉3745191 提问者

解决了
2017-04-09 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~

解决了……

0 回复 有任何疑惑可以回复我~
#1

追逐奔跑

如果是我猜对了问题所在,希望你采纳哦~~~
2017-04-09 回复 有任何疑惑可以回复我~

http://img1.sycdn.imooc.com//58e9dd7e0001a73e04680138.jpg

看上图

0 回复 有任何疑惑可以回复我~
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()


0 回复 有任何疑惑可以回复我~
#1

慕粉3745191 提问者

还是一样,,,我排查了,运行一次脚本,数据库增加一条。插入的是最后的一条数据。
2017-04-09 回复 有任何疑惑可以回复我~

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()

0 回复 有任何疑惑可以回复我~
#1

追逐奔跑

如果不是慕课网回复过程中把你的代码进行的缩进,那么就是格式出了问题,Python是一个严格缩进的语言,理应从connection一直到最后一行,向后缩进一次,或者说是向后四个空格
2017-04-09 回复 有任何疑惑可以回复我~
#2

慕粉3745191 提问者 回复 追逐奔跑

这个要怎么排查?
2017-04-09 回复 有任何疑惑可以回复我~

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


0 回复 有任何疑惑可以回复我~
#1

慕粉3745191 提问者

我运行一次脚本,数据库里插入一条数据
2017-04-09 回复 有任何疑惑可以回复我~

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

0 回复 有任何疑惑可以回复我~
#1

慕粉3745191 提问者

执行sql是insert
2017-04-09 回复 有任何疑惑可以回复我~
#2

追逐奔跑 回复 慕粉3745191 提问者

不介意把你写的代码粘出来吧?
2017-04-09 回复 有任何疑惑可以回复我~
#3

慕粉3745191 提问者 回复 追逐奔跑

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 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

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

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信