【问题标题】:Reading url from file Python从文件Python中读取url
【发布时间】:2018-04-02 17:58:27
【问题描述】:

无法读取txt文件中的url 想把txt中的url地址一一读取打开,想从url地址的源头用正则表达式获取标题的标题 错误信息:

Traceback(最近一次调用最后一次):文件“Mypy.py”,第 14 行,在 UrlsOpen = urllib2.urlopen(listSplit) 文件“/usr/lib/python2.7/urllib2.py”,第 154 行,在 urlopen 返回 opener.open(url, data, timeout) 文件“/usr/lib/python2.7/urllib2.py”,第 420 行,打开 req.timeout = timeout AttributeError: 'list' 对象没有属性 'timeout'

Mypy.py

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
import requests
import urllib2
import threading

UrlListFile = open("Url.txt","r") 
UrlListRead = UrlListFile.read() 
UrlListFile.close() 
listSplit = UrlListRead.split('\r\n')


    UrlsOpen = urllib2.urlopen(listSplit)
    ReadSource = UrlsOpen.read().decode('utf-8')
    regex = '<title.*?>(.+?)</title>'
    comp = re.compile(regex)
    links = re.findall(comp,ReadSource)
    for i in links:
        SaveDataFiles = open("SaveDataMyFile.txt","w")
        SaveDataFiles.write(i)
    SaveDataFiles.close()

【问题讨论】:

  • 你能添加一个Url.txt 内容的例子吗?
  • @fievel 我的 Url.txt i.stack.imgur.com/s81Mt.png
  • 您可以复制 URL.txt 文件的内容并使用代码格式将其粘贴到您的问题中吗?帮助您调试会更容易

标签: python readfile


【解决方案1】:

当您调用urllib2.urlopen(listSplit) 时,listSplit 是一个列表,而它需要是string or request object。迭代 listSplit 而不是将整个列表传递给 urlopen 是一个简单的修复。

此外,re.findall() 将为搜索的每个 ReadSource 返回一个列表。您可以通过以下几种方式处理:

我选择通过列出列表来处理它

websites = [ [link, link], [link], [link, link, link]

并遍历两个列表。这使得您可以为每个网站的每个 url 列表做一些特定的事情(放入不同的文件等......)。

您还可以展平website 列表以仅包含链接,而不是包含链接的另一个列表:

links = [link, link, link, link]

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re
import urllib2
from pprint import pprint

UrlListFile = open("Url.txt", "r")
UrlListRead = UrlListFile.read()
UrlListFile.close()
listSplit = UrlListRead.splitlines()
pprint(listSplit)
regex = '<title.*?>(.+?)</title>'
comp = re.compile(regex)
websites = []
for url in listSplit:
    UrlsOpen = urllib2.urlopen(url)
    ReadSource = UrlsOpen.read().decode('utf-8')
    websites.append(re.findall(comp, ReadSource))

with open("SaveDataMyFile.txt", "w") as SaveDataFiles:
    for website in websites:
        for link in website:
            pprint(link)
            SaveDataFiles.write(link.encode('utf-8'))
    SaveDataFiles.close()

【讨论】:

  • Traceback(最近一次调用最后):文件“Mypy.py”,第 14 行,在 UrlsOpen = urllib2.urlopen(url) 文件“/usr/lib/python2.7/urllib2 .py”,第 154 行,在 urlopen 返回 opener.open(url, data, timeout) 文件“/usr/lib/python2.7/urllib2.py”,第 427 行,在 open req = meth(req) 文件“/ usr/lib/python2.7/urllib2.py",第 1126 行,在 do_request_ raise URLError('no host given') urllib2.URLError:
  • 我更新了代码以使用更多新链接.splitlines() 并修复编码错误link.encode('utf-8')。试试新代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
相关资源
最近更新 更多