我正在尝试使用Beautifulsoup来刮刮Indeed.com上的职位信息。但是,当我抓取一个URL时,返回的HTML与我在Google Chrome浏览器中手动转到该URL并查看该HTML时看到的HTML不同。
这会导致我的应用程序获得一些我要抓取的网页上没有的工作职位。
例如,当我抓取https://se.indeed.com/jobb?q=Internship&l=Stockholm&start=0时,我的程序会找到以下公司名称:
[['Nordic Tech House',
'Beaubi',
'NO COMPANY NAME AVAILABLE',
'National Pen',
'SWEDISH STOCKINGS',
'Above Agency',
'BNP Paribas',
'Flattered',
'Stronger',
'Doberman',
'Tink',
'Google',
'BDO AB',
'Amuseio AB',
'Beaubi']]
但是,当我实际访问该网页时,没有来自Google,Amuseio等的职位发布,而且实际网页上的一些公司也丢失了。
我查看了BeautifulSoup在变量“ soup”中返回的HTML代码(请参见下文),并将其与网页上的实际HTML代码进行了比较。在BeatifulSoup返回的HTML中,肯定有Google和Amuseio。但是,这与我在浏览器中检查页面时看到的HTML不同。
当我尝试刮擦https://se.indeed.com/jobb?q=Summer+Internship&l=Stockholm时,一切正常。该网站没有任何分页。
这是我的代码:
from bs4 import BeautifulSoup
import requests
source = requests.get('https://se.indeed.com/jobb?q=Internship&l=Stockholm&start=0')
#THE URL WHICH PRODUCES THE STRANGE HTML
soup = BeautifulSoup(source.text, 'lxml')
articles = soup.find_all('div', class_='jobsearch-SerpJobCard')
#All job postings seem to be in a div with the class mentioned above.
def withdraw_company_names():
lst_of_company_names = []
for posting in articles:
try:
Company = posting.find('span', class_='company').text.strip()
except:
Company = "NO COMPANY NAME AVAILABLE"
print("Name: ", Company)
lst_of_company_names.append(Company)
return lst_of_company_names
基本上我想知道的是
有人知道为什么在第一种情况下会返回错误的HTML代码吗?
亲切的问候, 丹尼尔
答案 0 :(得分:0)
尝试使用其他解析器代替“ lxml” 喜欢
soup = BeautifulSoup(source.text, 'html.parser')
OR
soup = BeautifulSoup(source.text, 'html5lib')
答案 1 :(得分:0)
如果我理解正确,那么您想获取所有带有详细信息的乔布斯职位,然后由公司过滤。 您处在正确的轨道上,现在您需要发出其他请求,在这种情况下,对于每个帖子,请获取 data-jk 元素,例如:data-jk =“ 3a919d6b1b5070ca”并向https://se.indeed.com/visajobb?jk=3a919d6b1b5070ca
您将从该帖子中获取所有信息 现在,根据需要保存数据