首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Python网络抓取

Python网络抓取
EN

Stack Overflow用户
提问于 2016-12-02 14:16:09
回答 3查看 261关注 0票数 1

我试着用Python从网站上抓取数据。当我查看浏览器中的源代码时,我可以看到我正在寻找的所有东西。但是,当我用BeautifulSoup下载代码时,我只得到我想要的部分数据。

我知道BeautifulSoup不适用于javascript (我一点也不知道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'))

我知道如果没有实际的源代码,很难彻底回答我的问题。不幸的是,我不能展示代码!希望这不是太大的问题。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-12-02 14:41:53

也许不是最好的解决方案,但这是我的2美分,如果你只想解析链接。

代码语言:javascript
运行
复制
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)

当然,您可以搜索以下类:

代码语言:javascript
运行
复制
my_as = soup.findAll("a", { "class" : "someclass" })
票数 1
EN

Stack Overflow用户

发布于 2016-12-02 14:32:47

在没有浏览器的情况下很难获得动态(基于JavaScript)网站的完整副本,这就是为什么获得这种副本的最简单的方法是使用浏览器。

您可以查看PhantomJS来控制浏览器并下载HTML,也可以使用subprocess运行PhantomJS。

一个非常简单的下载网站内容的PhantomJS脚本:

代码语言:javascript
运行
复制
"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秒来改进它。

票数 1
EN

Stack Overflow用户

发布于 2016-12-02 14:23:47

您的代码是错误的,没有任何意义:

代码语言:javascript
运行
复制
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'])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40934262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档