2017-08-02 7 views
1

https://www.linkedin.com/jobs/search/?keywords=coach%20&location=United%20States&locationId=us%3A0Pythonの:私は、以下のウェブサイトをこすりしようとしていますセレン&PhantomJS

私が取得したいテキストは次のとおりです。

Showing 114,877 results 

HTMLコード:

<div class="jobs-search-results__count-sort pt3"> 
      <div class="jobs-search-results__count-string results-count-string Sans-15px-black-55% pb0 pl5 pr4"> 
       Showing 114,877 results 
      </div> 

マイPythonコード:

index_url = 'https://www.linkedin.com/jobs/search/?keywords=coach%20&location=United%20States&locationId=us%3A0' 

    java = '!function(i,n){void 0!==i.addEventListener&&void 0!==i.hidden&&(n.liVisibilityChangeListener=function(){i.hidden&&(n.liHasWindowHidden=!0)},i.addEventListener("visibilitychange",n.liVisibilityChangeListener))}(document,window);' 
    browser = webdriver.PhantomJS() 
    browser.get(index_url) 
    browser.execute_script(java) 
    soup = BeautifulSoup(browser.page_source, "html.parser") 
    link = "jobs-search-results__count-string results-count-string Sans-15px-black-55% pb0 pl5 pr4" 
    div = soup.find('div', {"class":link}) 
    text = div.text 

これまでのところ、私のコードが動作していないようです。私はそれがJavaスクリプトの実行で何かをすることだったと思います。

私は次のエラーを取得する:


AttributeError       Traceback (most recent call last) 
<ipython-input-33-7cdc1c4e0894> in <module>() 
     6 link = "jobs-search-results__count-string results-count-string Sans-15px-black-55% pb0 pl5 pr4" 
     7 div = soup.find('div', {"class":link}) 
----> 8 text = div.text 

AttributeError: 'NoneType' object has no attribute 'text' 

スープ出力:

<html><head>\n<script type="text/javascript">\nwindow.onload = function() {\n // Parse the tracking code from cookies.\n var trk = "bf";\n var trkInfo = "bf";\n var cookies = document.cookie.split("; ");\n for (var i = 0; i < cookies.length; ++i) {\n if ((cookies[i].indexOf("trkCode=") == 0) && (cookies[i].length > 8)) {\n  trk = cookies[i].substring(8);\n }\n else if ((cookies[i].indexOf("trkInfo=") == 0) && (cookies[i].length > 8)) {\n  trkInfo = cookies[i].substring(8);\n }\n }\n\n if (window.location.protocol == "http:") {\n // If "sl" cookie is set, redirect to https.\n for (var i = 0; i < cookies.length; ++i) {\n  if ((cookies[i].indexOf("sl=") == 0) && (cookies[i].length > 3)) {\n  window.location.href = "https:" + window.location.href.substring(window.location.protocol.length);\n  return;\n  }\n }\n }\n\n // Get the new domain. For international domains such as\n // fr.linkedin.com, we convert it to www.linkedin.com\n var domain = "www.linkedin.com";\n if (domain != location.host) {\n var subdomainIndex = location.host.indexOf(".linkedin");\n if (subdomainIndex != -1) {\n  domain = "www" + location.host.substring(subdomainIndex);\n }\n }\n\n window.location.href = "https://" + domain + "/authwall?trk=" + trk + "&trkInfo=" + trkInfo +\n  "&originalReferer=" + document.referrer.substr(0, 200) +\n  "&sessionRedirect=" + encodeURIComponent(window.location.href);\n}\n</script>\n</head><body></body></html> 
+0

十分な好奇心でログインしている 'Chrome'のwebdriverをを使用してアクセスするとき、コンテキスト内のテキストが' DIV = soup.find( 'DIV'、{ "クラス" の内側であると仮定します。 "result-コンテキスト "})'。 'PhantomJS'を使用しているとき、モーダルダイアログのログインに落ちる可能性があります。 –

答えて

1

私はPhantomJSを使用したことがないので、私は、webdriver.Chromeで解決策を持っています。 結果テキストを取得する場合は、2つのケースがあります。一つは、あなたがは、ドライバインスタンスからLinkedInの上に記録され、他方はあなたがログインしていないということであるということである。

するのは、あなたがログインしていませんとしましょう。次のコードは、あなたの仕事が終わってしまいますので

from selenium import webdriver 
from bs4 import BeautifulSoup 
driver = webdriver.Chrome() 
url = 'https://www.linkedin.com/jobs/search/?keywords=coach%20&location=United%20States&locationId=us%3A0' 
driver.get(url) 
soup = BeautifulSoup(driver.page_source, 'html.parser') 
text = soup.find('div',{'class':'results-context'}).text 
print(text) 

あなたが

from selenium import webdriver 
from bs4 import BeautifulSoup 
driver = webdriver.Chrome() 
url = 'https://www.linkedin.com/jobs/search/?keywords=coach%20&location=United%20States&locationId=us%3A0' 
driver.get(url) 
soup = BeautifulSoup(driver.page_source, 'html.parser') 

class = 'jobs-search-results__count-string results-count-string Sans-15px-black-55% pb0 pl5 pr4' 
text = soup.find('div',{'class':class}).text.split('\n')[1].lstrip() 
print(text) 
関連する問題