我正在尝试做一个简单的html解析练习-获取vsco中用户页面图像的链接。我到了页面列出图像的代码部分(div-> ul-> li),但是由于某种原因,我没有得到应该包含图像的代码的“ li”部分。我究竟做错了什么?我的到目前为止获得ul的代码:
section = soup.find('body').find('div',class_='page-wrap').find('section').find('div',class_='css-1vgyuuf').find('section').find('ul',style='display:flex;justify-content:center')
当我添加find('li')时,什么都没有显示。甚至尝试使用li class属性,但没有任何显示。预先感谢
编辑:链接到vsco页面 https://vsco.co/vsco/journal/p/1
答案 0 :(得分:0)
此站点的问题是,在页面加载后,您正在使用javascript将您要查找的信息呈现到DOM中。幸运的是,信息仍然在相同的响应中,但是在javascript代码中。
必要信息位于包含script
字符串的__PRELOADED_STATE__
标记内。稍后,您需要在变量中获取信息并将其解析为json:
import re
import json
...
script_text = soup.find(lambda tag: tag.name=="script" and '__PRELOADED_STATE__' in tag.text)
json_object = re.search('window\.__PRELOADED_STATE__ \= (\{.+\})', str(script_text)).group(1)
info = json.loads(json_object)
for key, article in info['entities']['articles'].items():
for image in article['body']:
if type(image['content'][0]) is dict:
print(image['content'][0]['responsiveUrl'])
这只是一个示例,您可以获取一些图像,info
变量中还有更多可用数据,您需要自己检查这些数据。