【发布时间】:2018-11-16 15:05:27
【问题描述】:
来自 Indeed.com 的网页抓取结果
-在“加利福尼亚州洛杉矶”中搜索“Junior Python”(完成)
-有时会打开弹出窗口。如果弹出窗口关闭窗口。(完成)
-前 3 个结果是赞助的,所以跳过这些并转到真正的结果
-点击结果摘要部分,打开带有完整摘要的侧面板
-抓取完整的摘要
-当点击结果摘要时,url 改变。我不想打开新窗口,而是想刮掉侧面板的完整摘要
-每个真实结果都在('div':{'data-tn-component':'organicJob'}) 之下。我可以使用 BeautifulSoup 获得职位、公司和简短摘要。不过,我想在侧面板上获得完整的摘要。
问题
1) 当我尝试点击链接(使用 Selenium)(职位或简短摘要,打开侧面板)时,代码只会点击第一个链接,即“赞助”。在 id='jobOrganic' 下无法定位和点击真实结果
2) (手动)单击实际结果后,我可以看到完整的摘要侧面板位于 <td id='auxCol'> 下,并且在其中,位于 .完整的摘要包含在<p> 标签中。当我尝试使用findAll('div':{'id':'vjs-desc'}) 进行硒刮完整摘要时,我得到的只是空白结果 []。
3) 打开侧面板时,url 也会发生变化。我尝试使用 Selenium 让驱动程序获取新的 url,然后对 url 进行调整以获得结果,但我得到的只是第一个赞助结果,这不是我想要的。我不确定为什么 BeautifulSoup 不断获得赞助的结果,即使我在 'id='jobOrganic' 真实结果下运行代码也是如此。
这是我的代码。在过去的两天里,我一直在研究这个问题,浏览了 stackoverflow、文档和谷歌,但找不到答案。我希望有人能指出我做错了什么以及为什么我无法获得完整的摘要。
感谢和抱歉这么久。
from selenium import webdriver
from selenium.webdriver.common.keys import Keys
from bs4 import BeautifulSoup as bs
url = 'https://www.indeed.com/'
driver = webdriver.Chrome()
driver.get(url)
whatinput = driver.find_element_by_id('text-input-what')
whatinput.send_keys('Junior Python')
whereinput = driver.find_element_by_id('text-input-where')
whereinput.click()
whereinput.clear()
whereinput.send_keys('Los Angeles, CA')
findbutton = driver.find_element_by_xpath('//*[@id="whatWhere"]/form/div[3]/button')
findbutton.click()
try:
popup = driver.find_element_by_id('prime-popover-close-button')
popup.click()
except:
pass
这就是我卡住的地方。结果摘要在 {'data-tn-component':'organicJob'} 下,跨度 class='summary'。单击此按钮后,将打开侧面板。
soup = bs(driver.page_source,'html.parser')
contents = soup.findAll('div',{"data-tn-component":"organicJob"})
for each in contents:
summary = driver.find_element_by_class_name('summary')
summary.click()
这会打开侧面板,但它会单击整个页面中的第一个赞助链接(赞助链接),而不是真正的结果。由于某种原因,这基本上超出了“organicJob”结果集。
url = driver.current_url
driver.get(url)
点击链接(赞助)后,我尝试设置新的 url,以测试我是否能获得侧面板完整摘要(尽管是赞助,作为测试目的)。
soup=bs(driver.page_source,'html.parser')
fullsum = soup.findAll('div',{"id":"vjs-desc"})
print(fullsum)
这实际上会打印出侧面板的完整摘要,但它会在整个循环中一遍又一遍地打印相同的第一个结果,而不是移动到下一个结果。
【问题讨论】:
标签: python selenium selenium-webdriver web-scraping beautifulsoup