我试着用Python从网站上抓取数据。当我查看浏览器中的源代码时,我可以看到我正在寻找的所有东西。但是,当我用BeautifulSoup下载代码时,我只得到我想要的部分数据。
我知道BeautifulSoup不适用于javascript (我一点也不知道javascript ),我想知道是否有办法下载所有原始源代码(基本上是一个硬拷贝),即使站点的一部分是用javascript完成的。
到目前为止,这是我的代码:
r = requests.get('https://www.example.com/example/example')
data = BeautifulSoup(r.content)
example1 = data.find_all("class_="example2")
examples = []
for example in example1:
examples.append(link.get('href'))
我知道如果没有实际的源代码,很难彻底回答我的问题。不幸的是,我不能展示代码!希望这不是太大的问题。
发布于 2016-12-02 14:41:53
也许不是最好的解决方案,但这是我的2美分,如果你只想解析链接。
import requests
from BeautifulSoup import BeautifulSoup
r = requests.get('http://www.examples.com')
data = BeautifulSoup(r.content)
examples = []
for d in data.findAll('a'):
examples.append(d)
当然,您可以搜索以下类:
my_as = soup.findAll("a", { "class" : "someclass" })
发布于 2016-12-02 14:32:47
在没有浏览器的情况下很难获得动态(基于JavaScript)网站的完整副本,这就是为什么获得这种副本的最简单的方法是使用浏览器。
您可以查看PhantomJS和硒来控制浏览器并下载HTML,也可以使用subprocess
运行PhantomJS。
一个非常简单的下载网站内容的PhantomJS脚本:
"use strict";
var fs = require('fs');
var system = require('system');
var webpage = require('webpage');
if (system.args.length != 2) {
console.log('Usage: gethtml.js <url>');
phantom.exit(1);
} else {
var url = system.args[1];
var page = webpage.create();
page.open(url, function(status) {
if (status !== 'success') {
phantom.exit(2);
}
setTimeout(function() {
console.log(page.content);
phantom.exit();
}, 500);
});
}
这需要等待500 is才能“下载”,这取决于站点和互联网连接,这是不够的,或者说是太多了,您可以通过等待直到PhantomJS停止使用onResourceReceived
回调下载数据X秒来改进它。
发布于 2016-12-02 14:23:47
您的代码是错误的,没有任何意义:
r = requests.get('https://www.example.com/example/example')
data = BeautifulSoup(r.content)
aes = data.find_all("class_="example2")
result = []
for a in aes:
result.append(a.attrs['href'])
https://stackoverflow.com/questions/40934262
复制相似问题