首页 > 解决方案 > 从网页中抓取链接

问题描述

这里是网络抓取的新手。我基本上想从网页中提取一个链接到我的 jupyter notebook 中,如下图所示:

在此处输入图像描述

以下是我尝试过的代码:

from flask import Flask, render_template, request, jsonify
from flask_cors import CORS, cross_origin
import requests
from bs4 import BeautifulSoup as bs
from urllib.request import urlopen as uReq

flipkart_url = "https://www.flipkart.com/search?q=" + 'acer-aspire-7-core-i5'
uClient = uReq(flipkart_url)
flipkartPage = uClient.read()
flipkart_html = bs(flipkartPage, "html.parser")

#Since I am only interested in the class "_1AtVbE col-12-12"
bigboxes = flipkart_html.findAll("div", {"class": "_1AtVbE col-12-12"})

现在事情就是这样,我不完全了解 bigboxes 存储的是什么。bigboxes的类型是bs4.element.ResultSet,长度是16。

现在,如果我运行:

box = bigboxes[0]
productlink = "https://www.flipkart.com" + box.div.div.div.a['href']

我收到一个错误。但是,当我运行时:

box = bigboxes[2]
productlink = "https://www.flipkart.com" + box.div.div.div.a['href']

我成功地提取了链接。有人可以向我解释为什么第三个元素能够阅读链接吗?我有 HTML 的基本知识(至少我是这么认为的),但我不了解它的层次。bigboxes究竟存储了什么?显然,HTML 脚本本身没有显示任何图层。

标签: htmlpython-3.xweb-scraping

解决方案


您的类过滤器不是很具体。

第一个和第二个元素指向不包含链接的 html 节点。因此你得到错误。

要检查的更具体的类可能是:_13oc-S

bigboxes = flipkart_html.findAll("div", {"class": "_13oc-S"})

推荐阅读