我是网络爬行的新手,我遇到了一个问题。
我希望从此页面获得2个信息: https://boardgamegeek.com/boardgame/197070/massive-darkness
我想要的信息是:
- 最少的球员数
- 最多玩家数
我在" 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 && 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的类型是None(而不是class&#39; bs4.element.Tag&#39;) - &gt;它里面没有任何信息,我也不知道为什么......
问题1:我如何获得我想要的2个信息?
问题2:&#34;!----&#34;装置
问题3:当我只做
soup.find("div")
时,我会上课&#39; bs4.element.Tag&#39;对象,但我仍然不知道从哪里获取我的信息...
答案 0 :(得分:1)
因此,正如我们已经发现所需的页面使用动态js生成的内容一样,解决方案将更加困难,但我们不需要进行大量更改。
现在我们需要在您的计算机上安装selenium webdriver和selenium服务器。使用此link和this(如果您要在服务器上执行过程)。
但是现在只需输入您的控制台:
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)