Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中从列表访问URL_Python - Fatal编程技术网

在Python中从列表访问URL

在Python中从列表访问URL,python,Python,我试图在HTML文档中搜索文章的链接,将它们存储到一个列表中,然后使用该列表分别搜索每个文章的标题 只需使用Beautiful Soup解析HTML并在每个页面中找到标题标签: read = [urllib.urlopen(link).read() for link in article_links] data = [BeautifulSoup(i).find('title').getText() for i in read] 这可能不是OP的直接答案,但不应被视为离题:您不应为html数据解

我试图在HTML文档中搜索文章的链接,将它们存储到一个列表中,然后使用该列表分别搜索每个文章的标题

只需使用
Beautiful Soup
解析HTML并在每个页面中找到标题标签:

read = [urllib.urlopen(link).read() for link in article_links]
data = [BeautifulSoup(i).find('title').getText() for i in read]

这可能不是OP的直接答案,但不应被视为离题:您不应为html数据解析网页

html网页没有经过优化以响应大量请求,特别是来自浏览器以外的请求。大量生成的流量可能导致服务器过载并触发DDOS

所以,您需要尝试为您感兴趣的站点找到任何可用的API,并且只有在没有找到任何相关API的情况下,才能使用请求缓存对web内容进行解析,以避免目标资源过载

乍一看,
卫报
知道如何使用

使用该API,您可以以简单的方式处理站点内容,使有趣的请求更加容易,并且无需解析即可获得答案

例如,按标签“技术”搜索:


使用这种方式,你可以毫无问题地深入浏览所有出版物

这可能吗。。。。你为什么不试着告诉我们你想读这篇文章呢?我正试着让程序读它,然后找到具体的数据,然后打印出来。例如,对于每个链接,找到每篇文章的标题,将其打印到shell中window@Monique试着问一个具体的问题。“这可能吗?”似乎是的,因为代码是你写的。。。。也许问题应该是这样的:“我写了这个代码[添加代码],我尝试了XXXX的东西..,然后得到了这个问题[添加问题,日志文件,错误,等等..]。我如何解决它?”好的,我编辑它是为了更具体地解决我的问题。有什么建议吗@ShudyI猜想OP是在询问打开给定链接的方法,而不是这里的列表理解。@anmol\u uppal现在怎么样?为什么不在一个简单的
for
循环中处理每个URL的数据?这里没有必要一次存储所有这些数据-在
文章链接中可能有数百或数千个URL。。。
from urllib.request import urlopen, URLError, HTTPError
import json
import sys

def safeprint(s):
  try:
    print(s)
  except UnicodeEncodeError:
    if sys.version_info >= (3,):
      print(s.encode('utf8').decode(sys.stdout.encoding))
    else:
      print(s.encode('utf8'))


url = "http://content.guardianapis.com/search?q=technology&api-key=test"

try:
  content = urlopen(url).read().decode("utf-8")
  json_data = json.loads(content)
  if "response" in json_data and "results" in json_data["response"]:
    for item in json_data["response"]["results"]:
      safeprint(item["webTitle"])
except URLError as e:
  if isinstance(e, HTTPError):
    print("Error appear: " + str(e))
  else:
    raise e