如何使用 Python 3.5 和 BeautifulSoup 抓取 href [重复]

Posted

技术标签:

【中文标题】如何使用 Python 3.5 和 BeautifulSoup 抓取 href [重复]【英文标题】:How to scrape href with Python 3.5 and BeautifulSoup [duplicate] 【发布时间】:2016-11-28 22:51:44 【问题描述】:

我想使用 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)

我得到 [None, None, .... None, None] 回复。 我需要一个包含类中所有 href 的列表。

有什么想法吗?

【问题讨论】:

【参考方案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,因此如果您想缩小范围,请为您需要的链接使用适当的正则表达式。

编辑:

解决你在cmets中提到的问题:

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

【讨论】:

哦,是的。这样可行。 Thx...是否可以仅从类 中获取hrefs? 好的,我一上班就会编辑我的帖子 请更新代码。谢谢你... 谢谢。现在我得到一个包含正确hrefs的列表。那很好。你知道我必须编写什么代码才能被刺痛吗?我的意思是这样的结果: ['href1', 'href2', 'href3',...., 'href10'] 因为我的其他数据看起来像这样,我想将数据导出到 csv 并将它们拆分为单独的行。非常感谢 我提供的代码让您逐行获取链接。您可以使用[i.a['href'] for i in soup.find_all('div', attrs='class' : 'project-card-content')] 将其作为列表返回。

以上是关于如何使用 Python 3.5 和 BeautifulSoup 抓取 href [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在Python 3.5中的异步方法调用之间传递上下文?

Python 3.5 - 如何对javascript呈现的页面进行webscraping

如何在我的虚拟环境中使用 Python 3 (3.5) 作为默认解释器?

如何在 Windows64 上为 Python 3.5 安装 pydotplus

如何使用内置的Python 3.5模块为登录脚本创建数据库

OpenCV 3.1.0 和 Python 3.5