我正在尝试使用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行呢?
您正在读取限制为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
的http请求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
这是使用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。