2019-03-21爬了一下午的坑之兄弟节点选择
如图,想要获得加深部分的链接,因此可以先得到所有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