关于字符串的切片问题。

以下是网页

web='''
a=web.find("b=web.find("windth=") #找出web中windth=的位置 
sulie=web[a+10:b-2]
print(sulie)

为什么网页信息中有四个img和windth,却只会输出第一个的网址内容呀!?
我要怎么修改代码获取其他的几个网址呢?

ChatGPT尝试为您解答,仅供参考
您的代码是将web中的所有内容查找"<img"的位置,然后再找"windth="的位置,再将这两个位置之间的字符串赋值给变量sulie并输出。如果想要获取所有的图片网址,您可以使用正则表达式或者HTML解析库(例如Beautiful Soup)来解析HTML代码,然后遍历所有的img标签,并获取它们的src属性值。


下面是使用Beautiful Soup来解析HTML代码并获取所有图片网址的示例代码:

from bs4 import BeautifulSoup

# 将HTML代码解析为Beautiful Soup对象
soup = BeautifulSoup(web, 'html.parser')

# 遍历所有的img标签
for img in soup.find_all('img'):
  # 获取img标签的src属性值
  img_src = img['src']
  print(img_src)

第一个问题:如何使用原来的代码获取其他的网址?

你可以在遍历所有的img标签时,使用相同的方法获取每个img标签的父元素的href属性值,例如:

for img in soup.find_all('img'):
  # 获取img标签的src属性值
  img_src = img['src']
  # 获取img标签的父元素的href属性值
  href = img.parent['href']
  print(img_src, href)

第二个问题:为什么寻找了所有的,赋值只有一个?

这是因为在第一个代码段中,你只是获取了第一个img标签的位置,然后截取了字符串中的一小段。


第三个问题:切片中的数字是怎么看的?

在字符串的切片中,第一个数字表示开始位置,第二个数字表示结束位置。例如:

string = "Hello World!"
substring = string[3:8]
print(substring)  # 输出 "lo Wo"

在上面的代码中,字符串string的切片[3:8]表示从第3个字符开始,截取到第8个字符之前,也就是截取"lo Wo"。

分割了字符段和加了个循环,
另外你的目的应该是要取url,开始位置应该要再加个1,不然会多个引号,所以是a+11


web='''<ul class="herolist clearfix">
<a href=" " target="_blank">< img src="http://game.gtimg.cn/images/yxzj/img201606/heroimg/194/194.jpg" windth='91px' alt="苏烈">苏烈</a ></li>
<a href="herodetail/195.shtml" target="_blank">< img src="http://game.gtimg.cn/images/yxzj/img201606/heroimg/195/195.jpg" windth='91px' alt="百里玄策">百里玄策</a ></li>
<a href="herodetail/196.shtml" target="_blank">< img src="http://game.gtimg.cn/images/yxzj/img201606/heroimg/196/196.jpg" windth='91px' alt="百里守约">百里守约</a ></li>
<a href="herodetail/193.shtml" target="_blank">< img src="http://game.gtimg.cn/images/yxzj/img201606/heroimg/193/193.jpg" windth='91px' alt="铠">铠</a ></li>
'''

str_list=web.split('<a')
for i in str_list:
    a = i.find("< img")  # 找出web中<img的位置
    #找不到会返回-1,排除掉这种情况
    if a!= -1:
        b = i.find("windth=")  # 找出web中windth=的位置
        sulie = i[a + 11:b - 2]
        print(sulie)