2017-08-03 50 views
0

我是網絡爬行新手,遇到問題。BeautifulSoup:從網站獲取信息(父母/子女問題?)

我想2點的信息,從這個頁面:我想 https://boardgamegeek.com/boardgame/197070/massive-darkness

的信息是:

  • minimum number of players
  • maximum number of players

我已經做了rignt集團公司的 「1-6球員」 去「檢查」,我得到:

<div class="gameplay-item-primary">      <!----><span ng-if="::geekitemctrl.geekitem.data.item.minplayers > 0 || geekitemctrl.geekitem.data.item.maxplayers > 0" min="::geekitemctrl.geekitem.data.item.minplayers" max="::geekitemctrl.geekitem.data.item.maxplayers">  <!----><span ng-if="min > 0">1</span><!----><!----><span ng-if="max>0 &amp;&amp; min != max"><!----><span ng-if="min>0">–</span><!---->6</span><!----> </span><!---->     Players     </div> 

我想:

url=requests.get('https://boardgamegeek.com/boardgame/197070/massive-darkness') 
website=url.content 
soup = BeautifulSoup(website, "html.parser") 
tmp=soup.find("div",{"class":"gameplay-item-primary"}) 

但TMP的類型是無(而不是類的bs4.element.Tag') - >在它裏面沒有信息,我不知道爲什麼....

Question1: How do I get the 2 informations I want?

Question2: What does "!----" means?

Question3: When I only do soup.find("div") I get a class 'bs4.element.Tag' object but I still don't know where to get my information with it...

回答

1

所以,因爲我們已經知道需要的頁面使用動態js生成的內容,所以解決方案將更加困難,但我們不需要改變很多。
現在我們需要將selenium webdriver和selenium服務器安裝到您的計算機上。使用此linkthis(如果您想在服務器上繼續進行操作)。
但至於現在只需鍵入您的控制檯:
pip3 install selenium chromedriver
現在我們必須在控制檯中運行chromedriver。
只需鍵入chromedriver

比你的整個腳本應該是這樣的:

from selenium import webdriver 
import urllib3 
import certifi 
from bs4 import BeautifulSoup as bs 


class Scrapper: 
    def __init__(self): 
     self.http = urllib3.PoolManager(cert_reqs='CERT_REQUIRED', ca_certs=certifi.where()) 
     #below we define our chrome driver. 
     self.options = webdriver.ChromeOptions() 
     self.options.add_argument('headless') 
     self.options.add_argument('window-size=1200x600') 
     self.driver = webdriver.Chrome(chrome_options=self.options) 

    def page_process(self, url): 
     self.driver.get(url) 
     self.driver.implicitly_wait(2) 
     return self.driver.page_source 

    def parse_element(self, element): 
     return bs(element, 'html.parser') 

class Job(Scrapper): 
    def __init__(self): 
    super().__init__() 

    def parse_process(self, url): 
     source_page = super().page_process(url) 
     parsed_page = super().parse_element(source_page) 

     divs_on_page = parsed_page.find_all("div",{"class":"gameplay-item-primary"}) 
     your_div = divs_on_page[0] 
     your_text = your_div.get_text() 
     players_arr = your_text.split('-') 
     min_players = players_arr[0] 
     max_players = players_arr[1] 



url = "https://boardgamegeek.com/boardgame/197070/massive-darkness" 
b = Job() 
b.parse_process(url) 
+0

謝謝您的回答。 我確實使用了BeautifulSoup4,但我沒有使用urllib3 ..... 我嘗試了你的代碼,即使我沒有去掉它(我是一個新手)。但我沒有「Scrapper」,「pip install Scrapper」bug和「conda install Scrapper」沒有找到它.....所以我卡住了:-) 我會試着重新問我的問題以一種簡單的方式。不管怎樣,謝謝你! :-) – Anneso

+0

@Anneso它是正確的嗎? – Grynets

+0

嗨格里奈斯,我不明白你的問題....什麼應該是正確的?此外,我工作你的代碼。 Scrapper不存在,但刮板確實....因此,我安裝它並更正您的代碼。但是,我仍然得到一些錯誤:「TypeError:module .__ init __()最多2個參數(給出3)」。我工作python3也許這就是爲什麼.... – Anneso