我试图检索的网址和类别名称从亚马逊的畅销书名单。出于某种原因,当RE遇到/ref=
时,我正在使用stops,我真的不明白为什么?我正在Windows7上使用Python2.7。你知道吗
典型的记录是
<li><a href="http://www.amazon.ca/Best-Sellers-Appstore-Android/zgbs/mobile-apps/ref=zg_bs_nav_0">Appstore for Android</a></li>
我的梦想是
Regex = "<li><a href='(http://www.amazon.ca/Best-Sellers.*?)'>(.*?)</a></li>"
Category = re.compile(Regex)
返回一个元组
[][0] http://www.amazon.ca/Best-Sellers-Appstore-Android/zgbs/mobile-apps
[][1] Appstore for Android
我确实得到了所有正确的记录,但是正如您所看到的,URL缺少/ref=zg_bs_nav_0
。你知道吗
category层次结构中的其他级别也存在同样的问题;URL中以/ref=开始并包括/ref=的所有内容都丢失了。你知道吗
这是我接受Martijn建议后的代码片段
# First page of the list of Best Sellers categories
URL = "http://www.amazon.ca/gp/bestsellers"
# Retrieve the page source
HTMLFile = urllib.urlopen(URL)
HTMLText = HTMLFile.read()
soup = BeautifulSoup(HTMLText)
for link in soup.select('li > a[href^=http://www.amazon.ca/Best-Sellers]'):
print link['href']
print link.get_text()
您使用的是正则表达式,但将XML与此类表达式匹配会变得太复杂、太快。别那么做。你知道吗
相反,使用HTML解析器,Python可以从以下几个方面进行选择:
后两种方法也能很好地处理格式错误的HTML,使许多拙劣的网站变得有意义。事实上,如果安装了beautifulsoup4,它会使用
lxml
作为解析器。你知道吗BeautifulSoup示例:
这使用CSS选择器来查找直接包含在
<li>
元素中的所有<a>
元素,其中href
属性以文本http://www.amazon.ca/Best-Sellers
开头。你知道吗演示:
请注意,Amazon会根据标题更改响应:
相关问题 更多 >
编程相关推荐