如何解决为什么我的刮板尝试从该网站刮刮时返回一个空列表?
我的网页抓取工具代码:
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文件中供以后使用。
解决方法
该网站使用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','₹698','84 Days','₹598','1.5GB','₹558','3GB','56 Days','₹449','₹399','₹398','28 Days','₹379','6GB','₹349','₹298','₹289','₹279','₹249','₹219','1GB','₹199','24 Days','₹179','₹149','₹129','₹19','200 MB','2 Days','₹79','₹49','100 MB','₹45','0 MB','₹401','3 GB','₹48','₹5000','₹4800','NA','₹1000','₹960','₹500','₹480','₹100','₹81.75','₹20','₹14.95','₹10','₹7.47','NA']
使用Selenium 编辑:使用pip install selenium
安装。从here
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,.fs-lg")])
driver.quit()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。