Python urllib2无法识别从href标记提取的美丽汤的url

Python urllib2无法识别从href标记提取的美丽汤的url,python,regex,beautifulsoup,href,urllib2,Python,Regex,Beautifulsoup,Href,Urllib2,我正在学习Python和BeautifulSoup,作为练习,我将创建一个测试网页。我的目标是从网页中提取一个url,然后按照此url提取另一个url 我的代码如下: 第一步: path = "http://python-data.dr-chuck.net/known_by_Fikret.html" pattern = re.compile(r'"(.+)"') page = urllib2.urlopen(path) soup = bs(page, 'l

我正在学习Python和BeautifulSoup,作为练习,我将创建一个测试网页。我的目标是从网页中提取一个url,然后按照此url提取另一个url

我的代码如下:

第一步:

path = "http://python-data.dr-chuck.net/known_by_Fikret.html"
pattern = re.compile(r'"(.+)"')
page = urllib2.urlopen(path)
soup = bs(page, 'lxml')
a = soup.find_all("a")
path = re.search(pattern, str(a[2])).group(0)
path
输出:

第二步:

page = urllib2.urlopen(path)
soup = bs(page, 'lxml')
a = soup.find_all("a")
path = re.search(pattern, str(a[2])).group(0)
path
输出:

---------------------------------------------------------------------------
URLError回溯(最近一次调用上次)
在()
---->1页=urllib2.urlopen(路径)
2汤=bs(第“lxml”页)
3 a=汤。查找所有(“a”)
4路径=重新搜索(模式,str(a[2]))。组(0)
5路
urlopen中的C:\users\alex\Anaconda2\lib\urllib2.pyc(url、数据、超时、cafile、capath、cadefault、上下文)
152.其他:
153开瓶器=_开瓶器
-->154返回opener.open(url、数据、超时)
155
156 def安装开启器(开启器):
C:\users\alex\Anaconda2\lib\urllib2.pyc处于打开状态(self、fullurl、数据、超时)
427请求=甲基(请求)
428
-->429响应=自身打开(请求,数据)
430
431#后处理响应
C:\users\alex\Anaconda2\lib\urllib2.pyc in\u open(self、req、data)
450
451返回self.\u调用链(self.handle\u打开,'未知',
-->452“未知打开”,请求)
453
454 def错误(self、proto、*args):
C:\users\alex\Anaconda2\lib\urllib2.pyc在调用链中(self、chain、kind、meth\u name、*args)
405 func=getattr(处理程序,方法名称)
406
-->407结果=函数(*args)
408如果结果不是无:
409返回结果
C:\users\alex\Anaconda2\lib\urllib2.pyc处于未知\u打开状态(self,req)
1264 def未知_打开(自身,需要):
1265类型=请求获取类型()
->1266引发url错误('未知url类型:%s'%type)
1267
1268 def parse_keqv_列表(l):
URLError:在检索正则表达式匹配的结果时使用
.group(1)
.group(0)
返回包含引号的整个匹配字符串。

在检索正则表达式匹配结果时使用
.group(1)
.group(0)
返回包括引号在内的整个匹配字符串

path.strip('"')
输出:

url不正确,只需去掉url中的
,或调整您的正则表达式即可

输出:


url不正确,只需去掉url中的
,或者调整您的正则表达式,我想问题是您的
路径中有额外的引号

'"http://python-data.dr-chuck.net/known_by_Montgomery.html"'
根据需要使用
strip()
修剪字符串

path = path.strip('"')
page = urllib2.urlopen(path)

您可以使用BeautifulSoup从锚标记中提取的src。您不需要为此目的使用正则表达式

示例

>>> html = """<a href="http://www.google.com">"""
>>> soup.find_all('a')[0]['href']
'http://www.google.com'
>html=“”
>>>soup.find_all('a')[0]['href']
'http://www.google.com'

我想问题是您的路径中有额外的引号

'"http://python-data.dr-chuck.net/known_by_Montgomery.html"'
根据需要使用
strip()
修剪字符串

path = path.strip('"')
page = urllib2.urlopen(path)

您可以使用BeautifulSoup从锚标记中提取的src。您不需要为此目的使用正则表达式

示例

>>> html = """<a href="http://www.google.com">"""
>>> soup.find_all('a')[0]['href']
'http://www.google.com'
>html=“”
>>>soup.find_all('a')[0]['href']
'http://www.google.com'

您的问题是因为url中有
。请将其删除

但是BeautifulSoup有自己的方法来获取url-
a[2]['href']

from bs4 import BeautifulSoup as bs
import urllib2

# - first page -

path = "http://python-data.dr-chuck.net/known_by_Fikret.html"

page = urllib2.urlopen(path)
soup = bs(page, 'lxml')

all_links = soup.find_all("a")

#for link in all_links:
#    print link['href']

print all_links[2]['href']

# - second page -

path = all_links[2]['href']

page = urllib2.urlopen(path)
soup = bs(page, 'lxml')

all_links = soup.find_all("a")

#for link in all_links:
#    print link['href']

print all_links[2]['href']
或更短

from bs4 import BeautifulSoup as bs
import urllib2

def get_url(path):
    page = urllib2.urlopen(path)
    soup = bs(page, 'lxml')

    all_links = soup.find_all("a")

    #for link in all_links:
    #    print link['href']

    return all_links[2]['href']

# - first page -

path = "http://python-data.dr-chuck.net/known_by_Fikret.html"

path = get_url(path)

print path

# - second page -

path = get_url(path)

print path

您的问题是因为url中有
。移除它

但是BeautifulSoup有自己的方法来获取url-
a[2]['href']

from bs4 import BeautifulSoup as bs
import urllib2

# - first page -

path = "http://python-data.dr-chuck.net/known_by_Fikret.html"

page = urllib2.urlopen(path)
soup = bs(page, 'lxml')

all_links = soup.find_all("a")

#for link in all_links:
#    print link['href']

print all_links[2]['href']

# - second page -

path = all_links[2]['href']

page = urllib2.urlopen(path)
soup = bs(page, 'lxml')

all_links = soup.find_all("a")

#for link in all_links:
#    print link['href']

print all_links[2]['href']
或更短

from bs4 import BeautifulSoup as bs
import urllib2

def get_url(path):
    page = urllib2.urlopen(path)
    soup = bs(page, 'lxml')

    all_links = soup.find_all("a")

    #for link in all_links:
    #    print link['href']

    return all_links[2]['href']

# - first page -

path = "http://python-data.dr-chuck.net/known_by_Fikret.html"

path = get_url(path)

print path

# - second page -

path = get_url(path)

print path

在你的url中,你有
开头和结尾-删除它。顺便说一句:如果你使用powerfull BeautifulSoup,那么你不需要
re
在你的url中,你有
开头和结尾-删除它。顺便说一句:如果你使用powerfull BeautifulSoup,那么你不需要
re