我正在尝试在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。
答案 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])