提取html代码下的信息

Extract information under the html code

这是 html 代码:

<div id="n_pnlJobResultsCount" class="jobresults_count">
    82 <span>Jobs Found</span>
</div>

这是我从上述 html 代码中提取职位数量的代码:

from bs4 import BeautifulSoup
import urllib2


final_site = 'http://www.careerbuilder.com/jobseeker/jobs/jobresults.aspx?s_rawwords=data+scientist&s_freeloc=San+Francisco%2C+CA'
html = urllib2.urlopen(final_site).read()
soup = BeautifulSoup(html)
num_jobs_area = soup.find('div',{'class':'jobresults_count'}).encode('utf-8')
job_numbers = re.findall('\d+', num_jobs_area)[2] 
print job_numbers

这使我的输出为 126,但是我想要 html 代码中提到的输出 82,它显示在 careerbuilder 网站上

您尝试抓取的站点 returns 使用 Python urllib 时的不同结果集。如果您打印 html 变量,您将看到源包含:

<div id="n_pnlJobResultsCount" class="jobresults_count">
    1 - 25 of 126 <span>Jobs Found</span>
</div>

模仿真正的浏览器,可以替换

html = urllib2.urlopen(final_site).read()

符合

req = urllib2.Request(final_site, headers={ 'User-Agent': 'Mozilla/5.0' })
html = urllib2.urlopen(req).read()

在这种情况下,您还应该更改

job_numbers = re.findall('\d+', num_jobs_area)[2] 

线到

job_numbers = re.findall('\d+', num_jobs_area)[0] 

您在使用 urllib 时收到不同的数据。它收到这样的结果:

<div id="n_pnlJobResultsCount" class="jobresults_count">
    1 - 25 of 126 <span>Jobs Found</span>
</div>

原因似乎是用户代理。您可以通过几种方式解决这对问题。

使用requests.

import requests
...
html = requests.get(final_site).content

更改 urllib2

使用的用户代理
req = urllib2.Request(final_site, headers={ 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0' })
html = urllib2.urlopen(req).read()

您的 job_numbers = 行也有一个小错误。第二个索引处没有元素。将行更改为此,解决了问题并打印了预期值

job_numbers = re.findall('\d+', num_jobs_area)[0]