Python 中的网页抓取
Webscraping in Python
以下代码输出空列表;我希望它能打印股票价格。任何帮助将不胜感激。谢谢!
import urllib.request
import re
companyList = ["aapl","goog","nflx"]
for i in range(len(companyList)):
url = "https://finance.yahoo.com/quote/"+companyList[i]+"?p="+companyList[i]
htmlfile = urllib.request.urlopen(url)
htmltext = htmlfile.read()
regex = '<span class="Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)" data-reactid="35"><!-- react-text: 36 -->()(.+?)<!-- /react-text --></span>'
pattern = re.compile(regex)
price = re.findall(pattern, str(htmltext))
print(price)
我会为其中一家公司做这件事。但我要你坚定的承诺,你不会告诉任何人我已经教你怎么做了。
获取该页面的 HTML 副本并将其保存在本地。
>>> import urllib.request
>>> import re
>>> url = 'https://finance.yahoo.com/quote/AAPL/?p=AAPL'
>>> htmlfile = urllib.request.urlopen(url)
>>> htmltext = htmlfile.read()
>>> open('temp.htm', 'w').write(str(htmltext))
533900
检查页面,然后复制并粘贴您希望能够在此页面和类似页面中识别的项目。放在评论里供参考。
>>> # <span class="Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)" data-reactid="35"><!-- react-text: 36 -->161.38<
将其保存在变量中,例如 exp
。
>>> exp = '<span class="Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)" data-reactid="35"><!-- react-text: 36 -->161.38<'
确认字符串中没有多个空白字符。如果有则用 \s+
替换整个空白字符串
>>> exp.find(' ')
-1
在字符串 中对正则表达式 有意义的每个字符前加上单个 '\' 字符。
>>> re.sub(r'[().]', lambda m: '\'+m.group(), exp)
'<span class="Trsdu\(0\.3s\) Fw\(b\) Fz\(36px\) Mb\(-4px\) D\(ib\)" data-reactid="35"><!-- react-text: 36 -->161\.38<'
显示结果并检查。
>>> regex = '<span class="Trsdu\(0\.3s\) Fw\(b\) Fz\(36px\) Mb\(-4px\) D\(ib\)" data-reactid="35"><!-- react-text: 36 -->([^<]+)<'
使用正则表达式查找目标项。
>>> re.findall(regex, str(htmltext))
['161.38']
看看下面的脚本是否有帮助。这也包括身份验证。
https://github.com/PraveenKandregula/JenkinsRSSScrappingWithPython/blob/master/JenkinsRSSScrappingWithPython.py
以下代码输出空列表;我希望它能打印股票价格。任何帮助将不胜感激。谢谢!
import urllib.request
import re
companyList = ["aapl","goog","nflx"]
for i in range(len(companyList)):
url = "https://finance.yahoo.com/quote/"+companyList[i]+"?p="+companyList[i]
htmlfile = urllib.request.urlopen(url)
htmltext = htmlfile.read()
regex = '<span class="Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)" data-reactid="35"><!-- react-text: 36 -->()(.+?)<!-- /react-text --></span>'
pattern = re.compile(regex)
price = re.findall(pattern, str(htmltext))
print(price)
我会为其中一家公司做这件事。但我要你坚定的承诺,你不会告诉任何人我已经教你怎么做了。
获取该页面的 HTML 副本并将其保存在本地。
>>> import urllib.request
>>> import re
>>> url = 'https://finance.yahoo.com/quote/AAPL/?p=AAPL'
>>> htmlfile = urllib.request.urlopen(url)
>>> htmltext = htmlfile.read()
>>> open('temp.htm', 'w').write(str(htmltext))
533900
检查页面,然后复制并粘贴您希望能够在此页面和类似页面中识别的项目。放在评论里供参考。
>>> # <span class="Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)" data-reactid="35"><!-- react-text: 36 -->161.38<
将其保存在变量中,例如 exp
。
>>> exp = '<span class="Trsdu(0.3s) Fw(b) Fz(36px) Mb(-4px) D(ib)" data-reactid="35"><!-- react-text: 36 -->161.38<'
确认字符串中没有多个空白字符。如果有则用 \s+
替换整个空白字符串>>> exp.find(' ')
-1
在字符串 中对正则表达式 有意义的每个字符前加上单个 '\' 字符。
>>> re.sub(r'[().]', lambda m: '\'+m.group(), exp)
'<span class="Trsdu\(0\.3s\) Fw\(b\) Fz\(36px\) Mb\(-4px\) D\(ib\)" data-reactid="35"><!-- react-text: 36 -->161\.38<'
显示结果并检查。
>>> regex = '<span class="Trsdu\(0\.3s\) Fw\(b\) Fz\(36px\) Mb\(-4px\) D\(ib\)" data-reactid="35"><!-- react-text: 36 -->([^<]+)<'
使用正则表达式查找目标项。
>>> re.findall(regex, str(htmltext))
['161.38']
看看下面的脚本是否有帮助。这也包括身份验证。
https://github.com/PraveenKandregula/JenkinsRSSScrappingWithPython/blob/master/JenkinsRSSScrappingWithPython.py