我需要一种从网页获取信息的方法。该信息存储在<script>
标记中,我找不到提取它的方法。这是我使用的代码的最后一次迭代。
for link in urls:
driver.get(link)
#print(driver.title)
content = driver.page_source
soup = BeautifulSoup(content, features="html.parser")
for a in soup.findAll(string=['script', "EM.", "productFullPrice"]):
print (a)
name=a.find(string=['EM.sef_name'])
print(name);
print(a)和print(name)不返回任何内容。
我要抓取的源代码如下:
<script type="text/javascript">
var EM = EM || {};
EM.CDN = 'link1';
EM.something = value;
答案 0 :(得分:0)
如果您想要标签中的文本,则不能仅将'EM'传递给string标签,因为它正在寻找与'EM'完全匹配的字符串。这也意味着它也不会与script
标签匹配,而只会在标签本身内查找字符串script
。要获取该节点,您需要将script
作为节点传递给findAll
函数。如果您查看script标记之间的内容的文本值,则看起来像"\n var EM = EM || {};\n EM.CDN = 'link1';\n EM.something = value; \n "
。因此找不到EM
,因为EM
不等于我上面发布的字符串。有几种方法可以解决此问题,这是我选择帮助返回类似于您发布的值的方法:
import bs4
html_string = '''
<script type="text/javascript">
var EM = EM || {};
EM.CDN = 'link1';
EM.something = value;
</script>
'''
wanted_strings= string=["EM.", "productFullPrice"]
soup = bs4.BeautifulSoup(html_string, features="html.parser")
wanted=[]
test = soup.findAll('script')
for word in wanted_strings:
for tag in test:
if word in tag.text:
wanted.append(tag)
wanted
这将在列表中为您提供脚本行,其中包含包含所需字符串的标签
[<script type="text/javascript">
var EM = EM || {};
EM.CDN = 'link1';
EM.something = value;
</script>]
另一种方法是查找标记,然后将每一行代码放在列表中
import bs4
html_string = '''
<script type="text/javascript">
var EM = EM || {};
EM.CDN = 'link1';
EM.something = value;
</script>
'''
soup = bs4.BeautifulSoup(html_string, features="html.parser")
test = soup.findAll('script')
blah = [x.strip() for x in test[0].text.split('\n') if x.strip()]
blah
这将为您提供类似的信息,根据您的用例,可能更容易搜索所需内容
['var EM = EM || {};', "EM.CDN = 'link1';", 'EM.something = value;']