BeautifulSoup4 python3.6无法在屏幕中间获取数据

时间:2017-04-09 19:02:48

标签: beautifulsoup python-3.6

我是日本国际象棋选手,我想根据时间来描绘策略的受欢迎程度。为此,我有一个网站数据库,其中包含第一个名为Yagura的策略的链接: https://shogidb2.com/strategy/%E7%9F%A2%E5%80%89/page/1 我想要做的是存储每个游戏开头出现的年份(像这样我可以存储它,然后计数)。在此页面“2017”。但是,获取文本信息是不可能的。我还试图找到网页链接从游戏页面获取数据......但链接没有出现......

这是我的代码,如果你有任何提示,欢迎你,我开始变得苛刻^^

import requests
from bs4 import BeautifulSoup

def downloadString(url, params = {}, cookies = {}):
    headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'}
    data = requests.get(url, params = params, headers = headers, cookies = cookies)
    return data.text
    
url = "https://shogidb2.com/strategy/%E7%9F%A2%E5%80%89"
html_doc = downloadString(url, params = {}, cookies = {})
soup = BeautifulSoup(html_doc)
      
links = []
      
for link in soup.find_all("a"):
  print(link.get("href"))

1 个答案:

答案 0 :(得分:0)

问题是网站是用ReactJS构建的,它创建了VirtualDom来填充数据。另一方面,BeautifulSoup寻找DOM元素。由于没有为元素创建DOM,因此它将获得空值。 最佳解决方案是使用casperjs http://casperjs.org/

我建议像casperjs这样的东西的唯一原因比使用python支持的抓取模块(如selenium)要简单得多。如果你对你的pythonic方式非常认真,Selenium应该适合你。但第一次很难配置。

使用npm install -g phantomjs casperjs安装 phantomjs casperjs

PS:Casperjs使用Phantomjs,它只是casperjs的依赖。

// scrape.js
var casper = require('casper').create();
var links;

function getLinks() {
// Scrape the links from top-right nav of the website
    var links = document.querySelectorAll('a');
    return Array.prototype.map.call(links, function (e) {
        return e.getAttribute('href')
    });
}

// Opens casperjs homepage
casper.start('https://shogidb2.com/strategy/%E7%9F%A2%E5%80%89');

casper.then(function () {
    links = this.evaluate(getLinks);
});

casper.run(function () {
    for(var i in links) {
        console.log(links[i]);
    }
    casper.done();
});

运行脚本:casperjs scrape.js