有一个大文件.此文件的每一行都是由人类输入的URL,因此可能会出现遗漏http
丢失www
等不同问题.
是否有可以修复这些网址的Python模块?我尝试过url_fix
,werkzeug.urls
但这并不是我正在寻找的东西.
www.example.com >> http://www.example.com/
Run Code Online (Sandbox Code Playgroud)
当然,没有办法可以修复每一个可能的错误,但我正在寻找修复最常见的错误.
你有什么建议吗?
编辑:根据彼得伍德的评论,让我们假设URL必须包含www
.就我而言,这些是eshop网址.
我试图弄清楚为什么我看到一个错误,ModuleNotFoundError: No module named 'urlparse'
但我从来没有在我的代码中调用urlparse.当我尝试用pip安装urlparse时,我发现这个模块不存在.当我尝试使用pip安装urllib.parse时,我看到与urllib.parse相同的消息.No matching distribution found for urllib.parse
.
我在这里错过了什么?
from flask import Flask, request, redirect, url_for, session, g, flash, \
render_template
from flask_oauth import OAuth
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base
# configuration
SECRET_KEY = 'development key'
DEBUG = True
# setup flask
app = Flask(__name__)
app.debug = DEBUG
app.secret_key = SECRET_KEY
oauth = OAuth()
# Use Twitter as example remote app
twitter = …
Run Code Online (Sandbox Code Playgroud) 第 5 行\n@自 v11.0.0 起已弃用 \xe2\x80\x94 - 使用 WHATWG URL API。
\n'url.parse' 的签名 '(urlStr: string): UrlWithStringQuery' 已弃用\nurl 。该声明在此处被标记为已弃用。
\n我正在写一些东西来"清理"一个URL.在这种情况下,我所要做的就是返回一个伪造的方案,urlopen
如果没有一个方法就行不通.但是,如果我用www.python.org
它来测试它会返回http:///www.python.org
.有没有人知道为什么额外的/,有没有办法在没有它的情况下返回?
def FixScheme(website):
from urlparse import urlparse, urlunparse
scheme, netloc, path, params, query, fragment = urlparse(website)
if scheme == '':
return urlunparse(('http', netloc, path, params, query, fragment))
else:
return website
Run Code Online (Sandbox Code Playgroud) 登录网站后,我想收集其链接.这是我用这个函数(使用mechanize和urlparse库):
br = mechanize.Browser()
.
. #logging in on website
.
for link in br.links():
url = urlparse.urljoin(link.base_url, link.url)
hostname = urlparse.urlparse(url).hostname
path = urlparse.urlparse(url).path
#print hostname #by printing this I found it to be the source of the None value
mylinks.append("http://" + hostname + path)
Run Code Online (Sandbox Code Playgroud)
我收到此错误消息:
mylinks.append("http://" + hostname + path)
TypeError: cannot concatenate 'str' and 'NoneType' objects
Run Code Online (Sandbox Code Playgroud)
我不确定如何解决这个问题,或者即使它可以修复.有没有办法强制函数追加,即使它会为None值产生一个非工作和奇怪的结果?
或者,我在链接中真正关注的是链接结束的内容.例如,其中一个链接的html代码看起来像这样(我所追求的是世界"lexik"):
<td class="center">
<a href="http://UnimportantPartOfLink/lexik>>lexik</a>
</td>
Run Code Online (Sandbox Code Playgroud)
所以另一条路线就是机械化可以直接收集这个值,绕过链路而无值麻烦
我有一个巨大的网址列表,都是这样的:
http://www.example.com/site/section1/VAR1/VAR2
Run Code Online (Sandbox Code Playgroud)
其中VAR1和VAR2是网址的动态元素.我想要做的是从这个url字符串中只提取VAR1.我试过使用urlparse,但输出看起来像这样:
ParseResult(scheme='http', netloc='www.example.com', path='/site/section1/VAR1/VAR2', params='', query='', fragment='')
Run Code Online (Sandbox Code Playgroud) 这是python代码:
url = http://www.phonebook.com.pk/dynamic/search.aspx
path = urlparse(url)
print (path)
>>>ParseResult(scheme='http', netloc='www.phonebook.com.pk', path='/dynamic/search.aspx', params='', query='searchtype=cat&class_id=4520&page=1', fragment='')
print (path.path)
>>>/dynamic/search.aspx
Run Code Online (Sandbox Code Playgroud)
现在我需要将其更改path.path
为我的要求。就像如果“/dynamic/search.aspx”是路径,那么我只需要第一个斜杠和最后一个斜杠之间的部分,包括“/dynamic/”的斜杠。
我已经尝试了这两行,但最终结果不是我所期望的,这就是为什么我问这个问题的原因,因为我对“urllib.parse”的了解不够。
path = path.path[:path.path.index("/")]
print (path)
>>>Returns nothing.
path = path.path[path.path.index("/"):]
>>>/dynamic/search.aspx (as it was before, no change.)
Run Code Online (Sandbox Code Playgroud)
简而言之,无论 path.path 结果是什么,我只需要目录名称。例如:“动态/搜索/search.aspx”。现在我需要“动态/搜索/”
如果我有一个 URL(例如:“ssh://hello@xyz.com:553/random_uri”、“ https://test.blah.blah:993/random_uri2 ”),我想设置/更新用户名网址。我知道有 urllib.parse.urlparse ( https://docs.python.org/3/library/urllib.parse.html ) 会分解它们,但我在创建新的 url (或更新) 解析时遇到问题结果是我打算使用的用户名。
有没有可以帮助设置/更新用户名的Python库?最好使用 urlparse 的解析结果。
我这样做:
urlparse.urljoin('http://example.com/mypage', '?name=joe')
Run Code Online (Sandbox Code Playgroud)
我得到了这个:
'http://example.com/?name=joe'
Run Code Online (Sandbox Code Playgroud)
虽然我想得到这个:
'http://example.com/mypage?name=joe'
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我正在开发一个需要在HTML页面中解析URL(主要是HTTP URL)的应用程序 - 我无法控制输入,其中一些是正如预期的那样有点混乱.
我经常遇到的一个问题是,在解析和加入路径部分中包含双斜线的URL时,urlparse是非常严格的(甚至可能是错误的?),例如:
testUrl = 'http://www.example.com//path?foo=bar'
urlparse.urljoin(testUrl,
urlparse.urlparse(testUrl).path)
Run Code Online (Sandbox Code Playgroud)
而不是预期的结果http://www.example.com//path
(甚至更好,使用标准化的单斜杠),我最终得到了http://path
.
我正在运行这样的代码的原因是因为这是我到目前为止发现的唯一一种从URL中删除查询/片段部分的方法.也许有更好的方法,但我找不到一个.
任何人都可以推荐一种方法来避免这种情况,或者我应该使用(相对简单,我知道)正则表达式来自我规范化路径?
urlparse ×10
python ×8
url ×3
python-3.x ×2
flask ×1
node.js ×1
python-2.7 ×1
regex ×1
urllib ×1