我正在尝试使用urllib.request
模块阅读网页的一行。
我尝试了readline()
,readlines()
和read()
,但我不能只读一行。
我该怎么做?
我只是想从python.org读取第581行。
我的剧本目前是:
import urllib.request
get_page = urllib.request.urlopen('https://www.python.org')
x = int('581')
get_ver = get_page.readline(x)
print("Currant Versions Are: ", get_ver)
结果是:
Currant Versions Are: b'<!doctype html>\n'
即使我更改数字,结果也始终相同。
那么我如何阅读第581行?
答案 0 :(得分:3)
您正在读取限制的574个字节,而不是574行。
通过这种方式,您可以在尝试最小化从服务器读取的数据量时获取n-th
行号(如果您需要更好的性能,请查看http range request):
import urllib.request
from itertools import islice
get_page = urllib.request.urlopen('https://www.python.org')
def get_nth_line(resp, n):
i = 1
while i < n:
resp.readline()
i += 1
return resp.readline()
print(get_nth_line(get_page, 574))
输出:
b'<p>Latest: <a href="/downloads/release/python-362/">Python 3.6.2</a> - <a href="/downloads/release/python-2713/">Python 2.7.13</a></p>\n'
urllib
requests.get('http://www.python.org').read()
import re, requests
resp = requests.get('http://www.python.org')
# regex might need adjustments
ver_regex = re.compile(r'<a href\="/downloads/release/python\-2\d+/">(.*?)</a>')
py2_ver = ver_regex.search(resp.text).group(1)
print(py2_ver)
输出:
Python 2.7.13
答案 1 :(得分:0)
这是使用readlines()
进行此操作的一种方法。
这是工作脚本:
import urllib.request
get_page = urllib.request.urlopen('https://www.python.org')
get_ver = get_page.readlines()
print("Currant Versions Are: ", get_ver[580])
它不起作用,因为readlines()
值必须是列表。它也是580而不是581,因为第一行计为0。