美文网首页
2019-03-21爬了一下午的坑之兄弟节点选择

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

作者: spiderzzZ | 来源:发表于2019-03-21 20:29 被阅读0次

    如图,想要获得加深部分的链接,因此可以先得到所有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

    相关文章

      网友评论

          本文标题:2019-03-21爬了一下午的坑之兄弟节点选择

          本文链接:https://www.haomeiwen.com/subject/jjhhvqtx.html