使用urllib2.urlopen()阅读

时间:2014-04-25 04:03:05

标签: python urllib2

我正在尝试在python中使用urllib2模块来获取网址的内容。

假设我的网址是“http://chortle.ccsu.edu/AssemblyTutorial/Chapter-01/ass01_12.html

当我尝试使用这两个简单的行来获取它的内容时,它会给我完整的html内容。

response = urllib2.urlopen(url)
content = response.read()
print(content)

然而,当我在函数中重新定义这个东西时,它会返回一个没有body标签内容的html。

def getContentURL(url):
    ''' returns the html content of the given url '''
    response = urllib2.urlopen(url)
    content = response.read()
    return content

content = getContentURL(url)
soup = BeautifulSoup(conten) #added in edit
print(content)

我只能得到这么多。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"     "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
 <meta content="text/html;charset=utf-8" http-equiv="Content-Type"/>
 <meta content="Bradley Kjell kjell at ieee dot org " name="author"/>
 <meta content="2007" name="copyright"/>
 <meta content="index,follow" name="robots"/>
 <title>
  CHAPTER 1 — Introduction
 </title>
 <link href="../AssemblyStyle.css" rel="stylesheet" type="text/css"/>
</head>
<body>
</body>
</html>

为什么会这样?我无法理解这种奇怪的行为。

===============================编辑=============== ================================ 所以我用同样的东西写了一个test.py,它完美无缺。

import os
from bs4 import BeautifulSoup
import urllib2
import urllib

def getContentURL(url):
    ''' returns the content of the given url in text format '''
    response = urllib2.urlopen(url)
    content = response.read()
    return content

url = "http://chortle.ccsu.edu/AssemblyTutorial/Chapter-01/ass01_1.html"

content = getContentURL(url)
soup = BeautifulSoup(content)
print(content) #prints everything
print(soup) #prints without the body's inner html

for link in soup.find_all('a'):
    #print(link)
    print(link.get('href'))

然而,我的原始代码中的相同代码行不起作用,其中包含一些其他内容。它的链接是https://github.com/kumar116/WebsiteCopier/blob/master/web_save.py。发布链接,因为它很大,可以粘贴在这里。

您将看到的唯一更改行是我正在打印 print(soup.prettify())或print(soup)。

这会吞噬身体标签内的所有东西。

我需要汤才能解析html。

1 个答案:

答案 0 :(得分:0)

也许您可能会使用bash脚本来捕获URL的内容,那么您只会从html输出中获取文本

#!/usr/bin/env bash

lynx -dump -nolist $1 | tr 'ÑÁÉÍÓÚ' 'ñáéíóú' | sed -e 's/ñ/n/g' | sed -e 's/á/a/g' | sed -e 's/é/e/g' | sed -e 's/í/i/g' | sed -e 's/ó/o/g' | sed -e 's/ú/u/g' | tr -sc 'A-Za-z0-9.,;:?!()\n"' '
 ' | tr 'A-Z' 'a-z'

此代码必须位于file.sh中,并从您的代码中调用

import subprocess as sp

text = sp.check_output(['sh', "%s/%s" % ('file.sh'), URL])