Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Python+;BeautifulSoup以串联方式提取标记,创建列表列表_Python_Python 2.7_Beautifulsoup - Fatal编程技术网

使用Python+;BeautifulSoup以串联方式提取标记,创建列表列表

使用Python+;BeautifulSoup以串联方式提取标记,创建列表列表,python,python-2.7,beautifulsoup,Python,Python 2.7,Beautifulsoup,我对python/BeautifulSoup有点陌生,我想知道我是否可以就如何完成以下内容获得一些指导 我有一个网页的html,其结构如下: 1) 包含所有图像名称(名称1、名称2、名称3)的标记中包含的代码块 2) 包含在具有图像URL的标记中的代码块 3) 出现在网页上的日期。我将其放入“date”变量中(该变量已被提取) 从代码中,我试图提取一个列表列表,其中包含[['image1'、'url1'、'date']、['image2'、'url2'、'date']],稍后我会将其转换为一个字

我对python/BeautifulSoup有点陌生,我想知道我是否可以就如何完成以下内容获得一些指导

我有一个网页的html,其结构如下:

1) 包含所有图像名称(名称1、名称2、名称3)的标记中包含的代码块

2) 包含在具有图像URL的标记中的代码块

3) 出现在网页上的日期。我将其放入“date”变量中(该变量已被提取)

从代码中,我试图提取一个列表列表,其中包含[['image1'、'url1'、'date']、['image2'、'url2'、'date']],稍后我会将其转换为一个字典(通过dict(zip(labels,values))函数),并插入到mysql表中

我所能想到的就是如何提取包含所有图像和所有url的两个列表。你知道我要做什么吗

需要记住的几件事:

1) 图像的数量始终随名称变化(1:1)

2) 日期始终显示一次

另外,如果有更优雅的方法通过bs4提取数据,请让我知道

from bs4 import BeautifulSoup
name = []
url = []
date = '2017-10-12'

text = '<div class="tabs"> <ul><li> NAME1</li><li> NAME2</li><li> NAME3</li> </ul> <div><div><div class="img-wrapper"><img alt="" src="www.image1.com/1.jpg" title="image1.jpg"></img> </div> <center><a class="button print" href="javascript: w=window.open("www.image1.com/1.jpg); w.print();"> Print</a> </center></div><div> <div class="img-wrapper"><img alt="" src="www.image2.com/2.jpg" title="image2.jpg"></img> </div> <center><a class="button print" href="javascript: w=window.open("www.image2.com/2.jpg"); w.print();">Print</a> </center></div><div> <div class="img-wrapper"><img alt="" src="www.image1.com/3.jpg" title="image3.jpg"></img></div> <center><a class="button print" href="javascript: w=window.open("www.image1.com/3.jpg"); w.print();"> Print</a> </center></div> </div></div>'
soup = BeautifulSoup(text, 'lxml')
#print soup.prettify()
#get names
for imgz in soup.find_all('div', attrs={'class':'img-wrapper'}):
    for imglinks in imgz.find_all('img', src = True): 
        #print imgz
        url.append((imglinks['src']).encode("utf-8"))
#3 get ad URLS
for ultag in soup.find_all('ul'):
    for litag in ultag.find_all('li'): 
        name.append((litag.text).encode("utf-8")) #dump all urls into a list
print url
print name
从bs4导入美化组
名称=[]
url=[]
日期='2017-10-12'
text='
  • NAME1
  • NAME2
  • NAME3
    • ' soup=BeautifulSoup(文本“lxml”) #打印汤。美化 #取名字 对于汤中的imgz.find_all('div',attrs={'class':'img-wrapper'}): 对于imgz.find_all('img',src=True)中的imglinks: #打印imgz url.append((imglinks['src']).encode(“utf-8”)) #3获取广告URL 对于汤中的ultag。查找所有('ul'): 对于ultag中的litag.find_all('li'): name.append((litag.text).encode(“utf-8”)#将所有URL转储到列表中 打印url 印刷品名称
这里有另一种可能的方法来提取URL和名称:

url = [tag.get('src') for tag in soup.find_all('img')]
name = [tag.text.strip() for tag in soup.find_all('li')]

print(url)
# ['www.image1.com/1.jpg', 'www.image2.com/2.jpg', 'www.image1.com/3.jpg']

print(name)
# ['NAME1', 'NAME2', 'NAME3']
至于最终列表的创建,这里有一些功能类似于@t.m.adam的建议:

print([pair + [date] for pair in list(map(list, zip(url, name)))])
# [['www.image1.com/1.jpg', 'NAME1', '2017-10-12'],
#  ['www.image2.com/2.jpg', 'NAME2', '2017-10-12'],
#  ['www.image1.com/3.jpg', 'NAME3', '2017-10-12']]
请注意,
map
现在很少被使用,而且它的使用在美国是完全不被鼓励的

或:


values=[list(i)+[date]for i in-zip(name,url)]
类似的东西?天哪,是的。你为什么漫不经心地把它写进评论里,而不是作为答案?非常感谢。现在很忙。。但您可以回答并接受,这可能对其他读者有用。感谢您提供替代bs4解决方案,以及回答原始问题!看起来我需要更多的练习来帮助我编写更高效的bs4代码。
n = len(url)
print(list(map(list, zip(url, name, [date] * n))))
# [['www.image1.com/1.jpg', 'NAME1', '2017-10-12'], ['www.image2.com/2.jpg', 'NAME2', '2017-10-12'], ['www.image1.com/3.jpg', 'NAME3', '2017-10-12']]