我最近正在使用python学习网络爬虫,我在一个小的示例代码中有一些问题。它有一个包含一些图像的本地html文件和一个抓取它的.py文件。
html文件'first_web.html':
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>First web</title>
<link rel="stylesheet" type="text/css" href="main.css">
</head>
<body>
<div class="header">
<h1>First web</h1>
</div>
<div class="main-content">
<ul class="article">
<li>
<img src="1.jpg" width="100" height="90">
<h3>first</h3>
<p>This is first</p>
</li>
<li>
<img src="2.jpg" width="100" height="90">
<h3>second</h3>
<p>This is second</p>
</li>
<li>
<img src="3.jpg" width="100" height="90">
<h3>Third</h3>
<p>This is Third</p>
</li>
</ul>
</div>
<div class="footer">
<p>©Alex</p>
</div>
</body>
</html>
这是.py文件:
from lxml import etree
f = open('first_web.html','r',encoding='utf-8')
# print(f.read())
html = etree.HTML(f.read())
for i in range(1,4):
img = html.xpath('//div[2]/ul/li[{}]/img/@src'.format(i))[0]
print(img)
我想问一下li [{}],。format [i],@ src和[0]在这行代码中是什么意思?
img = html.xpath('//div[2]/ul/li[{}]/img/@src'.format(i))[0]
答案 0 :(得分:0)
{}
是一个占位符,由于i
调用而成为.format()
的值。
>>> print 'My name is {}'.format('Steve')
My name is Steve
[0]
表示“此列表中的第一项”,即html.xpath(...)
返回多个值,我们只想要第一个。
>>> mylist = [ 'Apples', 'Oranges', 'Bananas' ]
>>> print mylist[0]
Apples
答案 1 :(得分:0)
此行使用python str.format功能创建xpath expression。
将python字符串格式与xpath表达式分开是件有点棘手的。
import pandas as pd
jf = pd.read_csv("Cliente_x_Pais_Sitio.csv", header=0, sep = ",")
del jf['Fill_rate']
del jf['Importe_a_pagar_a_medio']
a = jf.sort_values(by=["Cliente","Auth_domain","Sitio",'Country'])
f = a.groupby(["Cliente","Auth_domain","Sitio","Country"], as_index=False)['ECPM_medio'].min()
del a['Fecha']
del a['Subastas']
del a['Impresiones_exchange']
f.to_csv('Recom_Sitios.csv', index=False)
for item in f['ECPM_medio']:
item = float(item)
if item <= 0.5:
item = item * 0.8
else:
item = item * 0.9
item = float("{0:.2f}".format(item))
item
for item in item:
f['ECPM_medio'] = item
f.to_csv('Recom_Sitios22.csv', index=False)
是xpath的一部分,li[{}]
是您要查询的{}
元素的索引。因为你有一个循环,并希望python变量li
的值包含在表达式中。 i
将替换为值为{}
的格式。
i
是xpath的一部分,它会说:“请从选定的img-tag中给我src-attribute的值。”
最终的@src
就在那里,因为[0]
总是返回一个列表而你想要第一个元素。事实上,你的表达式确保只有一个结果。
如果您希望这可以使用任意数量的图像,您可能会完全删除范围循环和格式化部分并直接使用xpath:
xpath
这样就可以查询第二个div容器列表中所有img标记的HTML并获取它们的src属性。