我的网页抓取工具代码:
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文件中供以后使用。
答案 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
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()