为什么我的刮板尝试从该网站刮刮时返回一个空列表?

时间:2020-08-17 16:28:51

标签: python web-scraping beautifulsoup

我的网页抓取工具代码:

from bs4 import BeautifulSoup
import requests
 
url = "https://www.airtel.in/recharge-online?icid=header_new"
page = requests.get(url)
soup = BeautifulSoup(page.content, "lxml")

[i.text for i in soup.select(".fs-lg icn-rupee")]

我要从中抓取的URL是:https://www.airtel.in/recharge-online?icid=header_new (ISP的网站上市计划价格)

我要抓取的课程:“ fs-lg icn-rupee” ,用于存储价格的数字值

还有第二个次要的重要问题是,是否有可能使用“ .find_all()”函数(其中具有类“ fs-lg”的标签)来刮擦所有具有“ fs-lg”类的标签。 “ 以及拥有” fs-lg icn-rupee“ 的那些),还是我必须通过单独致电来做到这一点?

我当前收到的输出:

[]

我想要的输出是该类及其内容,我想使用“。get_text()” 或类似的东西将其转换为字符串,然后将其保存到.csv文件中供以后使用。

1 个答案:

答案 0 :(得分:1)

该网站使用JavaScript,但requests不支持它。因此我们可以使用Requests-HTML之类的库来抓取页面。

使用pip install requests-html安装它。

要同时选择类fs-lg,我们可以用逗号,分隔CSS选择器。参见以下示例:

from requests_html import HTMLSession
from bs4 import BeautifulSoup


URL = "https://www.airtel.in/recharge-online?icid=header_new"
# Initialize an HTML Session
session = HTMLSession()
# Get the html content
response = session.get(URL)
# Execute JavaScript
response.html.render(sleep=3)

soup = BeautifulSoup(response.html.html, "lxml")

print([i.text for i in soup.select("p.fs-lg.icn-rupee, .fs-lg")])

输出:

['₹2498', '2GB', '365 Days', '₹1498', '24 GB', '365 Days', '₹698', '2GB', '84 Days', '₹598', '1.5GB', '84 Days', '₹558', '3GB', '56 Days', '₹449', '2GB', '56 Days', '₹399', '1.5GB', '56 Days', '₹398', '3GB', '28 Days', '₹379', '6GB', '84 Days', '₹349', '2GB', '28 Days', '₹298', '2GB', '28 Days', '₹289', '1.5GB', '28 Days', '₹279', '1.5GB', '28 Days', '₹249', '1.5GB', '28 Days', '₹219', '1GB', '28 Days', '₹199', '1GB', '24 Days', '₹179', '2GB', '28 Days', '₹149', '2GB', '28 Days', '₹129', '1GB', '24 Days', '₹19', '200 MB', '2 Days', '₹79', '200 MB', '28 Days', '₹49', '100 MB', '28 Days', '₹45', '0 MB', '28 Days', '₹401', '3 GB', '28 Days', '₹48', '3 GB', '28 Days', '₹5000', '₹4800', 'NA', '₹1000', '₹960', 'NA', '₹500', '₹480', 'NA', '₹100', '₹81.75', 'NA', '₹20', '₹14.95', 'NA', '₹10', '₹7.47', 'NA']
使用Selenium

编辑:使用pip install selenium安装。从here

下载Chromedriver
from selenium import webdriver
from bs4 import BeautifulSoup
from time import sleep

URL = "https://www.airtel.in/recharge-online?icid=header_new"

driver = webdriver.Chrome(r"C:\path\to\chromedriver.exe")
driver.get(URL)
sleep(5)

soup = BeautifulSoup(driver.page_source, "lxml")

print([i.text for i in soup.select("p.fs-lg.icn-rupee, .fs-lg")])

driver.quit()