我正在努力刮下面的网站:https://oxolabs.eu/#portfolio
我正在寻找刮的信息是公司的URL的形式投资组合部分。我已经尝试了第一次与Scrapy,但它返回这个(网站是爬,但不是刮):
2022-07-28 11:46:03 [报废.核心.引擎]调试:抓取(200)〈获取https://oxolabs.eu/?status=funded#portfolio〉(参考:无)2022-07-28 11:46:03 [scrapy.核心.引擎]信息:闭合星形轮(已完成)
Beautifulsoup返回了除了投资组合部分中的URL之外的所有URL。
谁能解释一下为什么那部分没有被刮,我怎么能刮呢?
我的美丽的汤脚本:
from cgitb import text
from re import A
from bs4 import BeautifulSoup
import requests
url = "https://oxolabs.eu/?status=funded#portfolio"
ua={'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36'}
r = requests.get(url, headers=ua, verify=False)
soup = BeautifulSoup(r.text, features="lxml")
for link in soup.find_all('a'):
print(link.get('href'))
我还附上了我与Scrapy一起使用的脚本:
import scrapy
class StupsbSpider(scrapy.Spider):
name = 'stupsb'
allowed_domains = ['oxolabs.eu/']
start_urls = ['https://oxolabs.eu/?status=funded#portfolio']
def parse(self, response):
startups = response.xpath("//section[@class='oxo-section oxo-portfolio']")
for startup in startups:
# name = startup.xpath(".//a[@class='portfolio-entry-media-link']/@title").getall(),
# industry = startup.xpath(".//div[@class='text-block-6']//text()").get(),
url = startup.xpath("//section[@class='oxo-section oxo-portfolio']//@href").getall()
yield{
'url' : url,
}
2条答案
按热度按时间eagi6jfj1#
您需要的数据是使用javascipt从API动态加载的,而您只是试图获取尚未加载到DOM中的链接。如果您希望抓取这些数据,那么我会考虑使用Selenium作为无头抓取器。
如果是我,有时候你不需要通过抓取来获取数据,为什么不直接在这个链接上使用请求:
https://api.oxoservices.eu/api/v1/startups?site=labs&startup_status=funded
然后,您可以将查询字符串
startup_status
调整为funded
、accelerating
或exited
。您要查找的数据经过格式化,没有任何限制,您可以使用它从JSON有效负载中获取所需的图像或其他数据。作为入门示例:
这将给予你一个创业公司的列表,每个公司看起来像这样:
通常,使用这样的数据是一种更有效、更简单的方法,因为它已经是一种结构化的格式。
ie3xauqp2#
JavaScript只加载图像,而其余所需的数据是静态的。
范例:
输出: