我正在使用BS来解析工作列表的网站。它工作正常,但只返回div的第一项。我希望这能用名为{'class':'job-item'}的类迭代每个div。我已经阅读了文档并试图尝试使其工作,但我只是卡住了。
from bs4 import BeautifulSoup
import urllib2
import time
quote_page = 'https://jobbio.com/search/jobs?query=Developer&location=dublin§or='
page = urllib2.urlopen(quote_page)
soup = BeautifulSoup(page, 'html.parser')
divs = soup.findAll({'class': 'job-item'})
for div in divs:
role_box = soup.find(attrs={'class': 'color-dark-grey'})
role = role_box.text.strip() # strip() is used to remove starting and trailing
company_box = soup.find(attrs={'class': 'color-greenish-blue'})
company = company_box.text.strip() # strip() is used to remove starting and trailing
location_box = soup.find(attrs={'class': 'color-grey'})
location = location_box.text.strip() # strip() is used to remove starting and trailing
url_box = soup.find(attrs={'class': 'job-tile-actions'}).a['href']
url_root = 'http://jobbio.com'
url = url_root + url_box
salary = '-'
date = time.strftime("%d/%m/%Y")
array = {'role':str(role), 'company': str(company), 'location': str(location), 'salary': str(salary), 'date':date, 'url': str(url)}
print array
如果我删除for循环代码执行正常,所以我知道刮刀工作。我只是想让它为页面上的所有内容打印多个数组。这最终将进入DB,我可以在其中查询它。
由于
编辑:使用调试器,问题在于循环本身(有趣的是)
> /var/www/html/JobScraper/scrape.py(13)<module>()
-> divs = soup.findAll({'class': 'job-item'})
(Pdb) n
> /var/www/html/JobScraper/scrape.py(15)<module>()
-> for div in divs:
(Pdb) n
--Return--
> /var/www/html/JobScraper/scrape.py(15)<module>()->None
-> for div in divs:
(Pdb) n
--Return--
> <string>(1)<module>()->None
(Pdb) n
> /usr/lib/python2.7/bdb.py(404)run()
-> self.quitting = 1
答案 0 :(得分:1)
将soup.find()
循环中的所有for
更改为:
divs = soup.findAll(class_= 'job-item')
for div in divs:
div.find()
您应该从div
代码开始搜索,而不是soup
代码,soup
代码是HTML文档的root
代码