提取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]
这是 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]