Я ищу информацию о зарплате от спецификации работы в общем виде моды (с учетом множества способов оплаты зарплата может быть указана (с и без слово «зарплата» это предшествующего, с нашими без конечных нулей, диапазоны и т.д.)Вытягивание зарплаты из HTML-спецификаций работы различной структуры и обозначение зарплаты
Принимая три различных спецификации задания, я захватить HTML с urllib2
, а затем выполнить начальное регистронезависимым grep
для слова «заработной платы в каждом Результаты широко варьируются (извините пасты с меньшими размерами от Jupyter):
In [52]:
urllib2
Out[52]:
<module 'urllib2' from '/Users/Evan/anaconda/lib/python2.7/urllib2.pyc'>
In [82]:
Случай # 1
reponse = urllib2_urlopen('http://apply.ovoenergycareers.co.uk/vacancies/453/cro-manager/london/')
In [83]:
content = reponse.read()
In [84]:
save_html('salarygrep1', content)
In [59]:
!grep -i salary salarygrep1.html
!grep -i salary salarygrep1.html
<dt class="field_salary">Salary</dt>
<dd class="value_salary">
In [86]:
with open('salarygrep1.html') as s:
for line in s:
if 'salary' in line.lower():
print line
<dt class="field_salary">Salary</dt>
<dd class="value_salary">
In [79]:
Случай # 2
reponse = urllib2_urlopen('http://apply.ovoenergycareers.co.uk/vacancies/475/ovo-telesales-agent/bristol/')
In [80]:
content = reponse.read()
In [81]:
save_html('salarygrep2', content)
In [63]:
!grep -i salary salarygrep2.html
<dt class="field_salary">Salary</dt>
<dd class="value_salary">
Salary: �18,000 + benefits & competitive commission scheme; OTE range: �20,500 - �30,000
In [87]:
with open('salarygrep2.html') as s:
for line in s:
if 'salary' in line.lower():
print line
<dt class="field_salary">Salary</dt>
<dd class="value_salary">
Salary: �18,000 + benefits & competitive commission scheme; OTE range: �20,500 - �30,000
In [88]:
Случай # 3
reponse = urllib2_urlopen('https://gs7.globalsuccessor.com/centrica02/tpl_centrica02.asp?s=4A515F4E5A565B1A&jobid=48490,2356610248&key=21798303&c=028859657862&pagestamp=dbykvxmmwfnblykbqc')
In [89]:
content = reponse.read()
In [90]:
save_html('salarygrep3', content)
In [67]:
!grep -i salary salarygrep3.html
!grep -i salary salarygrep3.html
<p id="igSoundBite"><em><div>Salary: £28-£38K depending on experience</div></em></p><h3 id="igJobDesc0">Job Description</h3><p><div>Assistant Product Development Manager </div>
In [95]:
with open('salarygrep3.html') as s:
for line in s:
if 'salary' in line.lower():
print line
<p id="igSoundBite"><em><div>Salary: £28-£38K depending on experience</div></em></p><h3 id="igJobDesc0">Job Description</h3><p><div>Assistant Product Development Manager </div>
In [70]:
Случай # 4
reponse = urllib2_urlopen('http://jobs.emounlimited.com/senior-digital-project-manager/')
In [71]:
content = reponse.read()
In [72]:
save_html('salarygrep4', content)
In [94]:
!grep -i salary salarygrep4.html
In [92]:
with open('salarygrep4.html') as s:
for line in s:
if 'salary' in line.lower():
print line
In [ ]:
- В случае # 1, фактическая зарплата в другом
<div>
, и не получить взял на всех. - В случае № 2 зарплата обнаруживается, но (i) это диапазон, который нужно будет обрабатывать, и (ii) Есть символы валюты, отличные от ASCII (UK £).
- В случае № 3 зарплата также обнаруживается, но (i) это диапазон, который необходимо будет обрабатывать, и (ii) Есть символы валюты, отличные от ASCII (UK £).
- В случае, поскольку указанная зарплата указана, но слово «Зарплата» не упоминается, ничего не обнаруживается.
ли неразумно полагать, что, учитывая широкий разброс в дизайне страницы и в спецификации заработной платы, что один размер подходит всем (или один-размер-подходит больше всего) регулярное выражение или сочетание регулярных выражений может сделать Хитрость? Если нет, то как я буду строить его/их? Или, действительно, есть ли подход Python к этому, который может полагаться меньше на регулярное выражение?
Это один черт из регулярного выражения. Интересно, что BeautifulSoup удается обойти проблемы кодирования символов вокруг ** £ **. Это «html.parser» достигает этого? – Pyderman
@Pyderman это фактически '.text' самого' ответа' и 'BeautifulSoup' :) – alecxe