如何使用Regex(知道变量名)从URL中提取数据?

时间:2019-03-24 06:35:25

标签: python regex

我正在尝试使用Scrapy和Beautiful Soup从网站https://www.icra.in/Rationale/Index?CompanyName=20%20Microns%20Limited中提取数据。但是,当我使用类'list-nw'时,两个刮板都返回空。

我使用BS尝试了不同的解析器,但相同。仔细观察,我发现view source拥有我需要的数据。因此,我得到具有数据的文本中的页面内容。 (而不是课程)。

如何使用正则表达式为变量"LstrationaleDetails"中的键var Model提取整个数组。 (电话号码793)?

我尝试了几种正则表达式,但无法进行。是Regex唯一的选择,还是我可以使用Scrapy或BS?也很困惑,因为提取后我将如何存储它?如果它是JSON,则可以反序列化。我在想spliteval行中的某些内容。

我为BS尝试过这个。

page = urllib.request.urlopen(quote_page)
soup = BeautifulSoup(page, 'html5lib.parser')
print(soup)

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

归属于@ t.m.adam

您可以使用以下正则表达式从源html中提取。使用DOTALL flag允许换行。标头中需要User-Agent。

import requests
import re
import json

url = 'https://www.icra.in/Rationale/Index?CompanyName=20%20Microns%20Limited'
headers = {    
    'User-Agent' : 'Mozilla/5.0'
}
r = requests.get(url, headers = headers)
data = re.search('var Model =(.*?);\s+Ratinoal', r.text, flags=re.DOTALL).group(1)
result = json.loads(data)
for item in result['LstrationaleDetails']:
    print(item)