BeautifulSoup4 python3.6 无法获取屏幕中间的数据
BeautifulSoup4 python3.6 impossible to get data in middle of the screen
我是一名日本象棋棋手,我想根据时间绘制出一种策略的受欢迎程度。为此,我有一个网站数据库,其中包含第一个名为 Yagura 的策略的 link:
https://shogidb2.com/strategy/%E7%9F%A2%E5%80%89/page/1
我想做的是存储每场比赛开始时出现的年份(这样我可以存储它,然后计算)。在此页面“2017”中。但是,获取文本信息是不可能的。我也试图找到网络 links 从游戏页面获取数据...但是 links 没有出现...
这是我的代码,如果你有任何提示,欢迎你,我开始疯狂了^^
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"))
问题是网站是用 ReactJS
构建的,它创建 VirtualDom 来填充数据。 BeautifulSoup 另一方面寻找 DOM 元素。由于 DOM 不是为元素创建的,因此它将获得空值。 最好的解决方案是使用casperjs
(http://casperjs.org/)
我建议像 casperjs
这样的东西的唯一原因是比 python 支持的抓取模块(如 selenium
)更易于使用。如果您对自己的 pythonic 方式非常认真,Selenium
应该适合您。但是第一次配置比较麻烦
使用 npm install -g phantomjs casperjs
安装 phantomjs 和 casperjs。
PS: Phantomjs被casperjs使用,只是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
我是一名日本象棋棋手,我想根据时间绘制出一种策略的受欢迎程度。为此,我有一个网站数据库,其中包含第一个名为 Yagura 的策略的 link: https://shogidb2.com/strategy/%E7%9F%A2%E5%80%89/page/1 我想做的是存储每场比赛开始时出现的年份(这样我可以存储它,然后计算)。在此页面“2017”中。但是,获取文本信息是不可能的。我也试图找到网络 links 从游戏页面获取数据...但是 links 没有出现...
这是我的代码,如果你有任何提示,欢迎你,我开始疯狂了^^
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"))
问题是网站是用 ReactJS
构建的,它创建 VirtualDom 来填充数据。 BeautifulSoup 另一方面寻找 DOM 元素。由于 DOM 不是为元素创建的,因此它将获得空值。 最好的解决方案是使用casperjs
(http://casperjs.org/)
我建议像 casperjs
这样的东西的唯一原因是比 python 支持的抓取模块(如 selenium
)更易于使用。如果您对自己的 pythonic 方式非常认真,Selenium
应该适合您。但是第一次配置比较麻烦
使用 npm install -g phantomjs casperjs
安装 phantomjs 和 casperjs。
PS: Phantomjs被casperjs使用,只是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