使用bs4从javascript json类型数据中提取键值数据

时间:2019-04-26 09:18:04

标签: web-scraping beautifulsoup

我正在尝试从网页的HTML中提取一些信息。 但是正则表达式方法和列表理解方法都不起作用。

http://bitly.kr/RWz5x,有一个名为encparam的键,位于javascript标记的getjason中,该标记位于页面所有脚本元素的第49位。

谢谢您的帮助。

sam = requests.get('http://bitly.kr/RWz5x')
#html = sam.text
html=sam.content
soup = BeautifulSoup(html, 'html.parser')


scripts = soup.find_all('script')
#your_script = [script for script in scripts if 'encparam' in str(script)][0]
#print(your_script)
#print(scripts)
pattern = re.compile("(\w+): '(.*?)'")
fields = dict(re.findall(pattern, scripts.text))

1 个答案:

答案 0 :(得分:2)

将您的请求发送到以下网址,您可以在“来源”标签中找到该网址:

enter image description here


import requests
from bs4 import BeautifulSoup as bs
import re

res = requests.get("https://navercomp.wisereport.co.kr/v2/company/c1010001.aspx?cmp_cd=005930") 
soup = bs(res.content, 'lxml')
r = re.compile(r"encparam: '(.*)'")
data = soup.find('script', text=r).text
encparam = r.findall(data)[0]
print(encparam)

您可能会完全避免使用bs4:

import requests
import re
r = requests.get("https://navercomp.wisereport.co.kr/v2/company/c1010001.aspx?cmp_cd=005930") 
p = re.compile(r"encparam: '(.*)'")
encparam = p.findall(r.text)[0]
print(encparam)

如果您实际上想要字符串中的encparam部分:

import requests
import re
r = requests.get("https://navercomp.wisereport.co.kr/v2/company/c1010001.aspx?cmp_cd=005930") 
p = re.compile(r"(encparam: '\w+')")
encparam = p.findall(r.text)[0]
print(encparam)