Python urllib2无法识别从href标记提取的美丽汤的url
我正在学习Python和BeautifulSoup,作为练习,我将创建一个测试网页。我的目标是从网页中提取一个url,然后按照此url提取另一个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
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