如何使用Python 3.5和BeautifulSoup刮取href

时间:2016-07-25 14:26:40

标签: python html python-3.x beautifulsoup python-3.5

我想用Python 3.5和BeautifulSoup从网站https://www.kickstarter.com/discover/advanced?category_id=16&woe_id=23424829&sort=magic&seed=2449064&page=1中抓取每个项目的href。

这是我的代码

#Loading Libraries
import urllib
import urllib.request
from bs4 import BeautifulSoup

#define URL for scraping
theurl = "https://www.kickstarter.com/discover/advanced?category_id=16&woe_id=23424829&sort=magic&seed=2449064&page=1"
thepage = urllib.request.urlopen(theurl)

#Cooking the Soup
soup = BeautifulSoup(thepage,"html.parser")


#Scraping "Link" (href)
project_ref = soup.findAll('h6', {'class': 'project-title'})
project_href = [project.findChildren('a')[0].href for project in project_ref if project.findChildren('a')]
print(project_href)

我得到[无,无,......无,无]。 我需要一个包含该类所有href的列表。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

尝试这样的事情:

import urllib.request
from bs4 import BeautifulSoup

theurl = "https://www.kickstarter.com/discover/advanced?category_id=16&woe_id=23424829&sort=magic&seed=2449064&page=1"
thepage = urllib.request.urlopen(theurl)

soup = BeautifulSoup(thepage)

project_href = [i['href'] for i in soup.find_all('a', href=True)]
print(project_href)

这将返回所有href个实例。正如我在您的链接中看到的,很多href代码都在其中#。您可以使用简单的正则表达式来避免这些链接,或者忽略#符号。

project_href = [i['href'] for i in soup.find_all('a', href=True) if i['href'] != "#"]

这仍会为您提供一些垃圾链接,例如/discover?ref=nav,因此如果您想缩小范围,请使用正确的正则表达式来获取所需的链接。

编辑:

要解决您在评论中提到的问题:

soup = BeautifulSoup(thepage)
for i in soup.find_all('div', attrs={'class' : 'project-card-content'}):
    print(i.a['href'])