从 python 中的网页读取特定行
Reading a particular line from a webpage in python
在我的代码中,我试图将网页中的第一行文本放入 python 中的变量中。目前,我正在使用 urlopen 获取我想阅读的每个 link 的整个页面。我怎么只读网页上的第一行字。
我的代码:
import urllib2
line_number = 10
id = (np.arange(1,5))
for n in id:
link = urllib2.urlopen("http://www.cv.edu/id={}".format(n))
l = link.read()
我想从网页的以下html代码中提取单词"old car":
<html>
<head>
<link rel="stylesheet">
<style>
.norm { font-family: arial; font-size: 8.5pt; color: #000000; text-decoration : none; }
.norm:Visited { font-family: arial; font-size: 8.5pt; color: #000000; text-decoration : none; }
.norm:Hover { font-family: arial; font-size: 8.5pt; color : #000000; text-decoration : underline; }
</style>
</head>
<body>
<b>Old car</b><br>
<sup>13</sup>CO <font color="red">v = 0</font><br>
ID: 02910<br>
<p>
<p><b>CDS</b></p>
如果您要在可能编写方式不同的许多不同网页上执行此操作,您可能会发现 BeautifulSoup 很有帮助。
http://www.crummy.com/software/BeautifulSoup/bs4/doc/
正如您在快速入门底部看到的那样,您应该可以从页面中提取所有文本,然后选择您感兴趣的任何行。
请记住,这仅适用于 HTML 文本。一些网页大量使用javascript,requests/BeautifulSoup将无法阅读javascript提供的内容。
Using Requests and BeautifulSoup - Python returns tag with no text
另请参阅我过去遇到的问题,已由用户 avi 澄清:Want to pull a journal title from an RCSB Page using python & BeautifulSoup
使用XPath。这正是我们所需要的。
XPath, the XML Path Language, is a query language for selecting nodes from an XML document.
lxml
python library will help us with this. It's one of many. Libxml2, Element Tree, and PyXML是其中的一些选项。有很多很多库可以做这种事情。
使用 XPath
基于您现有的代码,类似下面的内容将起作用:
import urllib2
from lxml import html
line_number = 10
id = (np.arange(1,5))
for n in id:
link = urllib2.urlopen("http://www.cv.edu/id={}".format(n))
l = link.read()
tree = html.fromstring(l)
print tree.xpath("//b/text()")[0]
XPath 查询 //b/text()
基本上是说“从页面上的 <b>
元素获取文本。tree.xpath
函数调用 returns 一个列表,我们 select第一个使用[0]
。简单。
关于请求的旁白
Requests library 是用代码阅读网页的最先进技术。它可能会在以后为您省去一些麻烦。
完整的程序可能如下所示:
from lxml import html
import requests
for nn in range(1, 6):
page = requests.get("http://www.cv.edu/id=%d" % nn)
tree = html.fromstring(page.text)
print tree.xpath("//b/text()")[0]
注意事项
这些网址对我不起作用,所以您可能需要修改一下。不过,这个概念是合理的。
除了阅读网页,您可以使用以下方法测试 XPath:
from lxml import html
tree = html.fromstring("""<html>
<head>
<link rel="stylesheet">
</head>
<body>
<b>Old car</b><br>
<sup>13</sup>CO <font color="red">v = 0</font><br>
ID: 02910<br>
<p>
<p><b>CDS</b></p>""")
print tree.xpath("//b/text()")[0] # "Old cars"
在我的代码中,我试图将网页中的第一行文本放入 python 中的变量中。目前,我正在使用 urlopen 获取我想阅读的每个 link 的整个页面。我怎么只读网页上的第一行字。
我的代码:
import urllib2
line_number = 10
id = (np.arange(1,5))
for n in id:
link = urllib2.urlopen("http://www.cv.edu/id={}".format(n))
l = link.read()
我想从网页的以下html代码中提取单词"old car":
<html>
<head>
<link rel="stylesheet">
<style>
.norm { font-family: arial; font-size: 8.5pt; color: #000000; text-decoration : none; }
.norm:Visited { font-family: arial; font-size: 8.5pt; color: #000000; text-decoration : none; }
.norm:Hover { font-family: arial; font-size: 8.5pt; color : #000000; text-decoration : underline; }
</style>
</head>
<body>
<b>Old car</b><br>
<sup>13</sup>CO <font color="red">v = 0</font><br>
ID: 02910<br>
<p>
<p><b>CDS</b></p>
如果您要在可能编写方式不同的许多不同网页上执行此操作,您可能会发现 BeautifulSoup 很有帮助。
http://www.crummy.com/software/BeautifulSoup/bs4/doc/
正如您在快速入门底部看到的那样,您应该可以从页面中提取所有文本,然后选择您感兴趣的任何行。
请记住,这仅适用于 HTML 文本。一些网页大量使用javascript,requests/BeautifulSoup将无法阅读javascript提供的内容。
Using Requests and BeautifulSoup - Python returns tag with no text
另请参阅我过去遇到的问题,已由用户 avi 澄清:Want to pull a journal title from an RCSB Page using python & BeautifulSoup
使用XPath。这正是我们所需要的。
XPath, the XML Path Language, is a query language for selecting nodes from an XML document.
lxml
python library will help us with this. It's one of many. Libxml2, Element Tree, and PyXML是其中的一些选项。有很多很多库可以做这种事情。
使用 XPath
基于您现有的代码,类似下面的内容将起作用:
import urllib2
from lxml import html
line_number = 10
id = (np.arange(1,5))
for n in id:
link = urllib2.urlopen("http://www.cv.edu/id={}".format(n))
l = link.read()
tree = html.fromstring(l)
print tree.xpath("//b/text()")[0]
XPath 查询 //b/text()
基本上是说“从页面上的 <b>
元素获取文本。tree.xpath
函数调用 returns 一个列表,我们 select第一个使用[0]
。简单。
关于请求的旁白
Requests library 是用代码阅读网页的最先进技术。它可能会在以后为您省去一些麻烦。
完整的程序可能如下所示:
from lxml import html
import requests
for nn in range(1, 6):
page = requests.get("http://www.cv.edu/id=%d" % nn)
tree = html.fromstring(page.text)
print tree.xpath("//b/text()")[0]
注意事项
这些网址对我不起作用,所以您可能需要修改一下。不过,这个概念是合理的。
除了阅读网页,您可以使用以下方法测试 XPath:
from lxml import html
tree = html.fromstring("""<html>
<head>
<link rel="stylesheet">
</head>
<body>
<b>Old car</b><br>
<sup>13</sup>CO <font color="red">v = 0</font><br>
ID: 02910<br>
<p>
<p><b>CDS</b></p>""")
print tree.xpath("//b/text()")[0] # "Old cars"