2019-03-21爬了一下午的坑之兄弟节点选择

2019-03-21  本文已影响0人  spiderzzZ

如图,想要获得加深部分的链接,因此可以先得到所有class=movie-poster的div节点,再遍历所有该节点,并从中找出目标链接:

1.得到div节点:divs = soup.find_all("div",class_="movie-poster")

2.从兄弟节点中找到第二个img节点。由于第一个节点存在class,而第二个节点没有,所以无法通过class方法找到第二个img。兄弟节点用法:

for div in divs:

link = div.img.next_sibling.next_sibling

print(link)

表示div节点下的img节点后面的第二个节点,注意:不是第二个img节点而是从第一个img节点开始数后面的第二个节点。。。。。。如果只要一个next_sibling则会得到一个NONE。爬了一下午的坑。。。。。

-------------------------------------------------------------------------------------------------------

更新:巨大的发现,将标签选择变成一件非常简单的事情!!!!:,

如图,想要同时得到图片的链接和电影的名称,可以看到,链接(加深)与电影名称(浅深)不在同一个标签中,所以想要使他们在同一次遍历中出现,需要找到他们同时存在的上级标签,可以看到是dd标签。因此先找出所有的dd标签,之后在遍历所以的dd标签,并每次遍历都从中选出需要的节点内容,就可以实现图片与电影名同时出现。如下:

#1.得到链接与电影名称:

dds = soup.find_all("dd")

for dd in dds:

    links = dd.div.a.div.img.next_sibling.next_sibling.get("data-src")

    titles = dd.div.next_sibling.next_sibling.get("title")

    response = requests.get(link)

    img = response.content

#2.文件读写:

    path = r'C:\Users\11923\Desktop\新建文件夹 1/%s.jpg'%(titles)

    with open(path,'wb') as f:

    f.write(img)

注意看黑体字:在得到了dd标签之后,想要获得他下属的任意一个标签,可以通过点点点.....的方式定位到该标签。如果出现兄弟节点,可以使用next_sibling的方式来得到。并且可以直接.get(“属性”),来得到该属性的值。

总结一下:通过soup.find_all(“标签名”),来得到想要的最大的标签,之后可以在遍历中(for   in)通过.....来得到想要的小标签,然后直接.get就可以得到想要的属性的值,或者.string得到想要的标签的内容。

这样一来,我就可以迅速的得到我想要的任何值!!!!!nice

上一篇下一篇

猜你喜欢

热点阅读