我正在尝试从如下所示的页面中抓取元素列表:
<div class="container">
<b>1</b>
<b>2</b>
<b>3</b>
</div>
<div class="container">
<b>4</b>
<b>5</b>
<b>6</b>
</div>
我想使用xpath获得列表或元组:1、2、3、4、5、6……
在页面上使用for循环,我可以获得每个列表的第一个元素,也可以将所有数字作为一个列表。
你能帮我解决这个习题吗?提前感谢您的帮助!
发布于 2018-07-09 03:29:36
对于静态页面的web抓取,bs4是最好使用的软件包。使用bs4 ,你可以很容易地实现你的目标,如下所示:
from bs4 import BeautifulSoup
source = """<div class="container">
<b>1</b>
<b>2</b>
<b>3</b>
</div>
<div class="container">
<b>4</b>
<b>5</b>
<b>6</b>
</div>"""
soup = BeautifulSoup(source, 'html.parser') # parse content/ page source
soup.find_all('div', {'class': 'container'}) # find all the div element (second argument is optional mentioned to scrape/find only element with attribute value)
print([[int(x.text) for x in i.find_all('b')] for i in soup.find_all('div', {'class': 'container'})]) # get list of all div's number list as you require
输出:
[[1, 2, 3], [4, 5, 6]]
发布于 2018-07-09 04:22:34
您可以使用这个xpath表达式,它将为您提供两个字符串
.//*[@class='container'] ➡ '1 2 3', '4 5 6'
如果您希望使用6个字符串
.//*[@class='container']/b ➡ '1','2','3','4','5','6'
但是,要获得所需的内容,必须将xpath表达式分开
.//*[@class='container'][1]/b ➡ '1','2','3'
.//*[@class='container'][2]/b ➡ '4','5','6'
https://stackoverflow.com/questions/51235304
复制相似问题